Trabalhar com texto em ficheiro PS | Python

Contents
[ Hide Show ]

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:

  1. Criar um fluxo de saída para o ficheiro PS resultante.
  2. Crie as PsSaveOptions. Se utilizarmos uma fonte personalizada, precisamos de adicionar uma ou mais pastas de fontes personalizadas nas opções de guardar.
  3. Crie um PsDocument com o fluxo de saída já criado e as opções de guardar.
  4. Crie uma fonte necessária, sistema ou personalizada.
  5. 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.
  6. Feche a página.
  7. 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 é

Adicionar texto imagem1 Adicionar texto imagem2

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 é

Adicionar texto imagem3 Adicionar texto imagem4

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 é

Adicionar texto imagem5 Adicionar texto imagem6

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 é

Adicionar texto imagem8 Adicionar texto imagem9

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 é

Adicionar texto imagem7

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 é

Adicionar texto image10

Feche a página atual e guarde o documento.

1#Close current page
2document.close_page()
3
4#Save the document
5document.save()

Veja como trabalhar com texto em documentos PS em .NET, Java.

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.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.