Работа с текстом в PS-файле | Питон
Добавить текст в документ PS
В этой статье рассматриваются методы добавления текста в документ PS.
Текст необходимо отображать в документе с указанным шрифтом. Шрифты могут быть взяты из системных папок, известных как системные шрифты, или из пользовательских папок, куда шрифты помещаются для конкретного использования. Обычно собственные шрифты отсутствуют в системных папках. Библиотека Aspose.Page для Python через .NET предоставляет методы для использования системных и пользовательских шрифтов.
Мы заполняем или обводим текст, используя aspose.pydrawing, чтобы использовать системный класс fonts.Font. Числа в вызове метода представляют координаты x и y верхнего левого угла текста.
1font = aspose.page.ExternalFontCache.create_font_by_family_name("Times New Roman", font_size, aspose.pydrawing.FontStyle.BOLD)
2document.fillText(str, font, 50, 100);
Для использования пользовательских шрифтов нам сначала нужно добавить папку custom Fonts в PsSaveOptions, а затем получить aspose.page.font.DrFont. И, наконец, заполните или обведите текст этим объектом DrFont.
1options.setAdditionalFontsFolders(new String[] { FONTS_FOLDER });
2dr_font = aspose.page.ExternalFontCache.fetch_dr_font("Palatino Linotype", font_size, aspose.pydrawing.FontStyle.REGULAR)
3document.fillText(str, dr_font, 50, 100);
Другой способ работы с текстом предполагает встраивание шрифтов. Шрифт, используемый для отображения текста в документе PostScript, может быть встроен в файл или нет. При внедрении шрифт перемещается вместе с документом, обеспечивая единообразную визуализацию в программах просмотра или редакторах PostScript. Однако если шрифт не встроен, интерпретатор PostScript будет полагаться на существование шрифта в системных папках целевого хоста, что может привести к ошибкам, если шрифт отсутствует.
Кроме того, шрифты, используемые для заполнения, рисования или обрезки текста, могут быть встроены в файл PS в различных формах. На данный момент встраивание поддерживает типы шрифтов TrueType и Type3.
В приведенном ниже примере мы демонстрируем различные методы добавления текста в документ PS с использованием библиотеки Aspose.Page для Python через .NET.
Алгоритм добавления текста в новый документ PS предполагает следующие этапы:
Алгоритм добавления текста в новый документ PS включает следующие этапы:
- Создайте выходной поток для полученного PS-файла.
- Создайте PsSaveOptions. Если мы используем собственный шрифт, нам нужно добавить папку(и) с собственными шрифтами в параметры сохранения.
- Создайте PsDocument с уже созданным выходным потоком и сохраните параметры.
- Создайте необходимый шрифт: системный или пользовательский.
- Заполните или обведите текст созданным шрифтом. Здесь мы можем назначить aspose.pydrawing.Brush или aspose.pydrawing.Pen в зависимости от того, заполняем или рисуем текст. Или мы можем заполнить и обвести текст одним методом. Если мы используем метод без aspose.pydrawing.Brush или aspose.pydrawing.Pen, текст будет заполнен или обведен текущей краской/обводкой в текущем графическом состоянии.
- Закройте страницу.
- Сохраните документ.
Мы разделили пример кода на небольшие фрагменты кода, чтобы разделить первоначальную подготовку документа PS, использование каждого метода добавления текста и завершение документа.
Здесь мы создаем выходной поток и PsSaveOptions, добавляем папку пользовательских шрифтов для использования пользовательского шрифта в коде, создаем объект PsDocument, устанавливаем общий для всех методов текст в виде строковой переменной и создаем Переменная fontSize, которая также используется в каждом используемом методе.
1# The path to the documents directory.
2data_dir = Util.get_data_dir_working_with_text()
3
4fonts_folder = Util.get_data_dir_data() + """necessary_fonts/"""
5
6# Create an output stream for the PostScript document
7out_ps_stream = open(data_dir + "AddText_outPS.ps", "wb")
8# Create the save options with A4 size
9options = PsSaveOptions()
10# Set the custom fonts folder. It will be added to system fonts folders for finding the specific font.
11options.additional_fonts_folders = [ fonts_folder ]
12# A text to write to the PS file
13str = "ABCDEFGHIJKLMNO"
14font_size: float = 48
15
16# Create new 1-paged PS Document
17document = PsDocument(out_ps_stream, options, False)
Здесь вы можете увидеть использование системного шрифта для заполнения текста текущим цветом графического состояния (то есть черным) и новым SolidBrush.
1##################################### Using a sysem font (located in system fonts folders) for filling text ##################
2font = aspose.page.ExternalFontCache.create_font_by_family_name("Times New Roman", font_size, aspose.pydrawing.FontStyle.BOLD)
3# Fill the text with a default or already defined color. In the given case it is black.
4document.fill_text(str, font, 50, 100)
5# Fill the text with the Blue color.
6document.fill_text(str, font, 50, 150, aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.blue))
7############################################################################################################################
Результат запуска этого кода:
Теперь мы заполняем текст собственным шрифтом.
1##################################### Using a custom font (located in custom fonts folders) for filling text ##################
2dr_font = aspose.page.ExternalFontCache.fetch_dr_font("Palatino Linotype", font_size, aspose.pydrawing.FontStyle.REGULAR)
3# Fill the text with the default or already defined color. In the given case it is black.
4document.fill_text(str, dr_font, 50, 200)
5# Fill text with the Blue color.
6document.fill_text(str, dr_font, 50, 250, aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.blue))
7############################################################################################################################
Результат запуска этого кода:
Здесь вы можете увидеть использование системного шрифта для обводки текста текущим штрихом графического состояния (то есть черным) и новым Перо.
1##################################### Using sysem font (located in system fonts folders) for outlining text ##################
2# Outline the text with the default or already defined aspose.pydrawing.Pen. In the given case it is black colored 1-points width aspose.pydrawing.Pen.
3document.outline_text(str, font, 50, 300)
4# Outline the text the with blue-violet colored 2-points width aspose.pydrawing.Pen.
5pen = GraphicsFactory.create_pen_by_brush_and_width(aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.blue_violet), 2)
6document.outline_text(str, font, 50, 350, pen)
7############################################################################################################################
Результат запуска этого кода:
Теперь мы обводим текст собственным шрифтом.
1##################################### Using a custom font (located in custom fonts folders) for outlining text /////////////////
2# Outline the text with the default or already defined aspose.pydrawing.Pen. In the given case it is a black colored 1-points width aspose.pydrawing.Pen.
3document.outline_text(str, dr_font, 50, 450)
4# Outline the text with the blue-violet colored 2-points width aspose.pydrawing.Pen.
5pen = GraphicsFactory.create_pen_by_brush_and_width(aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.blue_violet), 2)
6document.outline_text(str, dr_font, 50, 500, pen)
7##############################################################################################################################
Результат запуска этого кода:
Здесь вы можете наблюдать использование системного шрифта для заполнения и обводки текста с помощью новых SolidBrush и Pen.
1# Fill the text with an orange color and stroke with a blue colored 2-points width aspose.pydrawing.Pen.
2pen = GraphicsFactory.create_pen_by_brush_and_width(aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.blue_violet), 2)
3document.fill_and_stroke_text(str, font, 50, 400, aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.yellow), pen)
Результат запуска этого кода:
И, наконец, мы заполняем и обводим текст собственным шрифтом.
1# Fill the text with the orange color and stroke with the blue colored 2-points width aspose.pydrawing.Pen.
2pen = GraphicsFactory.create_pen_by_brush_and_width(aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.blue), 2)
3document.fill_and_stroke_text(str, dr_font, 50, 550, aspose.pydrawing.SolidBrush(aspose.pydrawing.Color.orange), pen)
Результат запуска этого кода:
Закройте текущую страницу и сохраните документ.
1#Close current page
2document.close_page()
3
4#Save the document
5document.save()
В приведенном выше примере используются шрифты, встроенные в файл PostScript, как шрифты TrueType, поскольку это поведение по умолчанию при сохранении шрифтов в классе PsDocument. Если вам нужно изменить это поведение, используйте PsSaveOptions следующим образом:
1# Do not embed used fonts.
2options.embed_fonts = false;
1# Embed used fonts as Type3 fonts.
2options.embed_fonts_ss(FontConstants.EMBED_FONTS_TYPE3);
Вы можете загрузить примеры и файлы данных с сайта GitHub.