Работа с текстом в PostScript | .NET

Добавить текст в документ PS

В этой статье мы рассмотрим способы добавления текста в PS-документ.

Очевидно, что текст должен быть написан в документе каким-либо шрифтом. Шрифты могут храниться в системных папках, и в этом случае мы называем их системными шрифтами и могут храниться в пользовательских папках, которые представляют собой папки, в которые кто-то помещает шрифты для определенного использования. Обычно эти шрифты отсутствуют в системных папках. Мы называем такие шрифты пользовательскими шрифтами. Библиотека Aspose.Page для .NET предлагает методы использования как системных, так и пользовательских шрифтов.

Для использования системных шрифтов мы просто заполняем или обводим текст с помощью встроенного в .NET System.Drawing.Font. Числа в вызове метода — это координаты x и y верхнего левого угла текста.

1document.FillText(str, new System.Drawing.Font("Times New Roman", fontSize, FontStyle.Bold), 50, 100);

Чтобы использовать пользовательские шрифты, сначала добавьте папку custom Fonts в PsSaveOptions, затем выберите Aspose.Page.Font.DrFont. И, наконец, заполните или обведите текст этим объектом DrFont.

1options.AdditionalFontsFolders = new string[] { FONTS_FOLDER };
2Aspose.Page.Font.DrFont drFont = ExternalFontCache.FetchDrFont("Palatino Linotype", fontSize, FontStyle.Regular);
3document.FillText(str, drFont, 50, 100);

Другой вариант — работа с текстом, который также принадлежит шрифту. Шрифт, используемый для печати текста в документе PostScript, может быть встроен в этот файл или не встроен. В первом случае текст всегда будет отображаться в любой программе просмотра или редакторе PostScript, поскольку он всегда находится рядом с текстом. Во втором случае следует ожидать, что используемый шрифт существует в системных папках на целевом хосте. Если используемый шрифт не существует, интерпретатор PostScript может выдать ошибку.

Третий вариант тоже про шрифт, потому что шрифт — это главное при добавлении текста. Шрифт, используемый для заполнения или рисования (или обрезки) текста, может быть встроен в файл PS в различных формах. Теперь поддерживаются типы шрифтов TrueType и Type3 во встраивании.

Четвертый вариант — возможность писать глифы текста с заданными шагами (шириной). Это позволяет добавить немного художественности тексту.

В приведенном ниже примере мы демонстрируем использование различных методов добавления текста в документ PS с помощью библиотеки Aspose.Page для .NET.

Алгоритм добавления текста в новый документ PS включает следующие шаги:

  1. Создайте выходной поток для полученного PS-файла.
  2. Создайте PsSaveOptions. Если мы используем собственный шрифт, мы добавляем папку(и) с пользовательскими шрифтами в параметры сохранения.
  3. Создайте PsDocument с уже созданным потоком вывода и сохраните параметры.
  4. Создайте необходимый шрифт: системный или пользовательский.
  5. Заполните или обведите текст созданным шрифтом. Здесь мы можем назначить System.Drawing.Brush или System.Drawing.Pen в зависимости от того, заполняем или рисуем текст. Или мы можем заполнить и обвести текст одним методом. Если мы используем метод без System.Drawing.Brush или System.Drawing.Pen, текст будет заполнен или обведен текущей краской/обводкой в ​​текущем графическом состоянии.
  6. Закройте страницу.
  7. Сохраните документ.

Мы разбили пример кода на небольшие фрагменты кода, чтобы разделить первоначальную подготовку документа PS, использование каждого метода добавления текста и завершение документа.

В этом фрагменте кода мы создаем выходной поток и PsSaveOptions, добавляем папку пользовательских шрифтов для использования пользовательского шрифта в коде, создаем объект PsDocument, устанавливаем общий для всех методов текст в виде строковой переменной и создаем переменную FontSize, которая также используется в каждом используемом методе.

 1//Create an output stream for the PostScript document
 2using (Stream outPsStream = new FileStream(dataDir + "AddText_outPS.ps", FileMode.Create))
 3{
 4    //Create save options with the A4 size
 5    PsSaveOptions options = new PsSaveOptions();
 6    // Set the custom fonts folder. It will be added to system fonts folders for finding the needed font.
 7    options.AdditionalFontsFolders = new string[] { FONTS_FOLDER };
 8    //A text to write to the PS file
 9    string str = "ABCDEFGHIJKLMNO";
10    int fontSize = 48;
11
12    // Create a new 1-paged PS Document
13    PsDocument document = new PsDocument(outPsStream, options, false);

Здесь мы демонстрируем использование системного шрифта для заполнения текста текущим цветом графического состояния (то есть черным) и новым SolidBrush.

1////////////////////////////////////// Using the sysem font (located in system fonts folders) for filling the text //////////////////
2    Font font = new Font("Times New Roman", fontSize, FontStyle.Bold);
3    //Fill the text with the default or already defined color. In given case it is black.
4    document.FillText(str, font, 50, 100);
5    //Fill the text with Blue color.
6    document.FillText(str, font, 50, 150, new SolidBrush(Color.Blue));
7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Для Linux, MacOS и других операционных систем, отличных от Windows, мы предлагаем использовать наш пакет Nuget Aspose.Page.Drawing. Он использует серверную часть Aspose.Drawing вместо системной библиотеки System.Drawing.

Поэтому импортируйте пространство имен Aspose.Page.Drawing вместо System.Drawing. В приведенном выше и последующих фрагментах кода вместо System.Drawing.Font будет использоваться Aspose.Page.Drawing.Font, вместо System.Drawing.SolidBrush будет использоваться Aspose.Page.Drawing.SolidBrush и так далее. Наши примеры кода на GitHub содержат все необходимые замены.

Результат

Добавить текстовое изображение1

Добавить текстовое изображение2

Теперь мы заполняем текст собственным шрифтом.

1////////////////////////////////////// Using the custom font (located in custom fonts folders) for filling the text /////////////////
2	  DrFont drFont = ExternalFontCache.FetchDrFont("Palatino Linotype", fontSize, FontStyle.Regular);
3	  //Fill the text with default or already defined color. In the given case it is black.
4	  document.FillText(str, drFont, 50, 200);
5	  //Fill the text with the Blue color.
6	  document.FillText(str, drFont, 50, 250, new SolidBrush(Color.Blue));
7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Результат

Добавить текстовое изображение3

Добавить текстовое изображение4

Здесь мы демонстрируем использование системного шрифта для обводки текста с текущим штрихом графического состояния (то есть черным) и с новым Пером.

1////////////////////////////////////// Using the sysem font (located in system fonts folders) for outlining the text ////////////////
2	  //Outline the text with default or already defined pen. In the given case it is a black colored 1-points width pen.
3	  document.OutlineText(str, font, 50, 300);
4	  //Outline the text with the blue-violet colored 2-points width pen.
5	  document.OutlineText(str, font, 50, 350, new Pen(new SolidBrush(Color.BlueViolet), 2));
6/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Результат

Добавить текстовое изображение5

Добавить текстовое изображение6

Теперь мы обводим текст собственным шрифтом.

1////////////////////////////////////// Using the custom font (located in custom fonts folders) for outlining the text /////////////////
2		//Outline the text with the default or already defined pen. In given case it is a black colored 1-points width pen.
3		document.OutlineText(str, drFont, 50, 450);
4		//Outline the text with the blue-violet colored 2-points width pen.
5		document.OutlineText(str, drFont, 50, 500, new Pen(new SolidBrush(Color.BlueViolet), 2));		
6///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Результат

Добавить текстовое изображение8

Добавить текстовое изображение9

Здесь мы демонстрируем использование системного шрифта для заполнения и обводки текста с помощью новых SolidBrush и Pen.

1    //Fill the text with the orange color and stroke with the blue colored 2-points width pen.
2    document.FillAndStrokeText(str, font, 50, 400, new SolidBrush(Color.Yellow), new Pen(new SolidBrush(Color.BlueViolet), 2));

Результат

Добавить текстовое изображение7

Теперь мы заполняем и обводим текст собственным шрифтом.

1		//Fill the text with the orange color and stroke with the blue colored 2-points width pen.
2		document.FillAndStrokeText(str, drFont, 50, 550, new SolidBrush(Color.Orange), new Pen(new SolidBrush(Color.Blue), 2));

Результат

Добавить текстовое изображение10

И, наконец, заполняем текст, задавая ширину глифов. Количество ширин должно быть равно количеству глифов.

1	//Glyphs widths
2    float[] widths = new float[] { 87, 87, 87, 87, 34, 87, 87 };    
3    //Fill ASCII text using with assigning glyphs widths.
4    document.FillText("BAMBOOK", widths, drFont, 50, 600, new SolidBrush(Color.Blue));
5    
6    //Glyphs widths
7    widths = new float[] { 87, 34, 87, 87, 87, 87, 87 };
8    //Fill Unicode text using with assigning glyphs widths.
9    document.FillText("ЗООПАРК", widths, drFont, 50, 650, new SolidBrush(Color.Orange));

Результат

Добавить текстовое изображение11

Закройте текущую страницу, сохраните документ.

1    //Close the current page
2    document.ClosePage();
3    
4    //Save the document
5    document.Save();

См. работу с текстом в документах PS в Java.


В приведенном выше примере используются шрифты, встроенные в файл PostScript, как шрифты TrueType, поскольку это поведение по умолчанию при сохранении шрифтов в классе PsDocument. Если вам нужно изменить это поведение, используйте PsSaveOptions следующим образом:

1		//Do not embed used fonts.
2		options.EmbedFonts = false;
1		//Embed used fonts as Type3 fonts.
2		options.EmbedFontsAs = FontConstants.EMBED_FONTS_TYPE3;

Вы можете загрузить примеры и файлы данных с сайта GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.