Trabalhar com texto em ficheiro PS | Python
Adicionar Texto em Documento PS
Este artigo explora os métodos de adição de texto a um documento PS.
O texto precisa de ser renderizado num documento com uma fonte específica. As fontes podem ser obtidas a partir de pastas do sistema, conhecidas como fontes do sistema, ou a partir de pastas personalizadas, onde as fontes são armazenadas para utilização específica. Normalmente, as fontes personalizadas não estão presentes nas pastas do sistema. A biblioteca Aspose.Page para Python via .NET fornece métodos para utilizar fontes do sistema e personalizadas.
Preenchemos ou contornamos o texto utilizando aspose.pydrawing para utilizar a classe fonts.Font do sistema. Os números na chamada do método representam as coordenadas x e y do canto superior esquerdo do texto.
1font = aspose.page.ExternalFontCache.create_font_by_family_name("Times New Roman", font_size, aspose.pydrawing.FontStyle.BOLD)
2document.fillText(str, font, 50, 100);
Para utilizar tipos de letra personalizados, precisamos primeiro de adicionar a pasta custom fonts em PsSaveOptions e, em seguida, procurar aspose.page.font.DrFont. E, por fim, preencher ou contornar o texto com este objeto 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);
Outra forma de trabalhar com texto passa pela incorporação de tipos de letra. A fonte utilizada para apresentar texto num documento PostScript pode ou não estar incorporada no ficheiro. Quando incorporada, a fonte acompanha o documento, garantindo uma renderização consistente entre visualizadores ou editores PostScript. No entanto, se a fonte não estiver incorporada, o interpretador PostScript dependerá da existência da fonte nas pastas do sistema do host de destino, o que pode resultar em erros se a fonte estiver em falta.
Além disso, as fontes utilizadas para preencher, desenhar ou recortar texto podem ser incorporadas num ficheiro PS em diferentes formatos. Atualmente, a incorporação suporta os tipos de fonte TrueType e Type3.
No exemplo abaixo, mostramos vários métodos para adicionar texto a um documento PS utilizando a biblioteca Aspose.Page para Python via .NET.
O algoritmo para adicionar texto a um novo documento PS envolve os seguintes passos:
Um algoritmo para adicionar texto a um novo documento PS inclui os seguintes passos:
- Criar um fluxo de saída para o ficheiro PS resultante.
- Crie as PsSaveOptions. Se utilizarmos uma fonte personalizada, precisamos de adicionar uma ou mais pastas de fontes personalizadas nas opções de guardar.
- Crie um PsDocument com o fluxo de saída já criado e as opções de guardar.
- Crie uma fonte necessária, sistema ou personalizada.
- Preencha ou contorne o texto com o tipo de letra criado. Aqui, podemos atribuir aspose.pydrawing.Brush ou aspose.pydrawing.Pen, dependendo se vamos preencher ou desenhar o texto. Ou podemos preencher e contornar o texto num único método. Se utilizarmos um método sem aspose.pydrawing.Brush ou aspose.pydrawing.Pen, o texto será preenchido ou contornado com a tinta/traço atual no estado gráfico atual.
- Feche a página.
- Guarde o documento.
Dividimos o código de exemplo em pequenos excertos de código para separar a preparação inicial do documento PS, a utilização de cada método para adicionar texto e a conclusão do documento.
Aqui, criamos um outputstream e PsSaveOptions, adicionamos uma pasta de tipos de letra personalizados para utilizar o tipo de letra personalizado no código, criamos um objeto PsDocument, definimos o texto comum a todos os métodos como uma variável de string e criamos uma variável fontSize que é também utilizada em todos os métodos utilizados.
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)
Aqui pode ver a utilização da fonte do sistema para preencher o texto com a cor atual do estado gráfico (que é preto) e com o novo 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############################################################################################################################
O resultado da execução deste código é
Agora, preenchemos o texto com a fonte personalizada.
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############################################################################################################################
O resultado da execução deste código é
Aqui pode ver a utilização da fonte do sistema para contornar o texto com o traço atual do estado gráfico (que é preto) e com a nova Caneta.
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############################################################################################################################
O resultado da execução deste código é
Agora, contornamos o texto com a fonte personalizada.
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##############################################################################################################################
O resultado da execução deste código é
Aqui pode observar a utilização da fonte do sistema para preencher e contornar o texto com um novo SolidBrush e 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)
O resultado da execução deste código é
E, por fim, preenchemos e contornamos o texto com a fonte personalizada.
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)
O resultado da execução deste código é
Feche a página atual e guarde o documento.
1#Close current page
2document.close_page()
3
4#Save the document
5document.save()
No exemplo acima, são utilizadas fontes incorporadas no ficheiro PostScript como fontes TrueType, pois este é o comportamento padrão de guardar fontes na classe PsDocument. Se precisar de alterar este comportamento, utilize PsSaveOptions da seguinte forma:
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);
Pode descarregar exemplos e ficheiros de dados do GitHub.