Работа с текстом в 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 включает следующие шаги:
- Создайте выходной поток для полученного PS-файла.
- Создайте PsSaveOptions. Если мы используем собственный шрифт, мы добавляем папку(и) с пользовательскими шрифтами в параметры сохранения.
- Создайте PsDocument с уже созданным потоком вывода и сохраните параметры.
- Создайте необходимый шрифт: системный или пользовательский.
- Заполните или обведите текст созданным шрифтом. Здесь мы можем назначить System.Drawing.Brush или System.Drawing.Pen в зависимости от того, заполняем или рисуем текст. Или мы можем заполнить и обвести текст одним методом. Если мы используем метод без System.Drawing.Brush или System.Drawing.Pen, текст будет заполнен или обведен текущей краской/обводкой в текущем графическом состоянии.
- Закройте страницу.
- Сохраните документ.
Мы разбили пример кода на небольшие фрагменты кода, чтобы разделить первоначальную подготовку документа 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////////////////////////////////////// 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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Результат
Здесь мы демонстрируем использование системного шрифта для обводки текста с текущим штрихом графического состояния (то есть черным) и с новым Пером.
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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Результат
Теперь мы обводим текст собственным шрифтом.
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///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Результат
Здесь мы демонстрируем использование системного шрифта для заполнения и обводки текста с помощью новых 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));
Результат
Теперь мы заполняем и обводим текст собственным шрифтом.
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));
Результат
И, наконец, заполняем текст, задавая ширину глифов. Количество ширин должно быть равно количеству глифов.
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));
Результат
Закройте текущую страницу, сохраните документ.
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.