Работа с текстом в PS-файле | Ява

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

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

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

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

1document.fillText(str, new java.awt.Font("Times New Roman", java.awt.Font.BOLD, fontSize), 50, 100);

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

1options.setAdditionalFontsFolders(new String[] { FONTS_FOLDER });
2com.aspose.page.font.DrFont drFont = ExternalFontCache.fetchDrFont("Palatino Linotype", fontSize, Font.PLAIN);
3document.fillText(str, drFont, 50, 100);

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

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

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

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

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

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

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

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

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

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

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

Результат

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

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

Результат

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

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

 1//Create a stroke with a width of 2 points.
 2Stroke stroke = new BasicStroke(2);
 3//Create stroke's blue-violet color
 4Color strokeColor = new Color(138, 43, 226);
 5
 6//////////////////////////////////////Using system font (located in system fonts folders) for outlining text ////////////////
 7//Outline text with default or already defined pen. In the given case it is a black colored 1-point width pen.
 8document.outlineText(str, font, 50, 300);
 9
10//Outline text with blue-violet colored 2-point width pen.
11document.outlineText(str, font, 50, 350, strokeColor, stroke);
12/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Результат

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

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

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

Результат

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

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

1//Fill text with orange color and stroke with blue-violet 2-point width pen.
2document.fillAndStrokeText(str, font, 50, 400, Color.YELLOW, strokeColor, stroke);

Результат

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

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

1//Fill the text with orange color and stroke with blue 2-point width pen.
2document.fillAndStrokeText(str, drFont, 50, 550, Color.ORANGE, Color.BLUE, stroke);

Результат

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

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

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

Результат

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

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

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

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


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

1//Do not embed used fonts.
2options.setEmbedFonts(false);
1//Embed used fonts as Type3 fonts.
2options.setEmbedFontsAs(FontConstants.EMBED_FONTS_TYPE3);

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

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.