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