Trabalhar com Texto em PostScript | .NET

Contents
[ Hide Show ]

Adicionar Texto em Documento PS

Neste artigo, consideramos as formas como um texto pode ser adicionado a um documento PS.

Obviamente, o texto deve ser escrito num documento com alguma fonte. As fontes podem ser armazenadas em pastas do sistema e, neste caso, chamamos-lhes fontes do sistema, e podem ser armazenadas em pastas personalizadas, que são pastas nas quais alguém coloca fontes para uso específico. Normalmente, estas fontes não estão presentes nas pastas do sistema. Chamamos a estas fontes fontes personalizadas. A biblioteca Aspose.Page para .NET oferece métodos para utilizar fontes do sistema e personalizadas.

Para utilizar tipos de letra do sistema, basta preencher ou contornar um texto com System.Drawing.Font nativo do .NET. Os números na chamada do método são as coordenadas x e y do canto superior esquerdo do texto.

1document.FillText(str, new System.Drawing.Font("Times New Roman", fontSize, FontStyle.Bold), 50, 100);

Para utilizar tipos de letra personalizados, adicione primeiro a pasta custom fonts em PsSaveOptions e, em seguida, procure Aspose.Page.Font.DrFont. E, por fim, preencha ou contorne o texto com este objeto DrFont.

1options.AdditionalFontsFolders = new string[] { FONTS_FOLDER };
2Aspose.Page.Font.DrFont drFont = ExternalFontCache.FetchDrFont("Palatino Linotype", fontSize, FontStyle.Regular);
3document.FillText(str, drFont, 50, 100);

Outra opção é trabalhar com texto que também pertence a um tipo de letra. A fonte utilizada para imprimir texto no documento PostScript pode estar incorporada neste ficheiro ou não. No primeiro caso, o texto será sempre renderizado em qualquer visualizador ou editor PostScript, uma vez que estará sempre presente com o texto. No segundo caso, devemos esperar que a fonte utilizada exista em pastas do sistema no host de destino. Se a fonte utilizada não existir, o interpretador PostScript poderá gerar um erro.

A terceira opção também se refere à fonte, uma vez que é o principal componente na adição de texto. Uma fonte utilizada para preencher ou desenhar (ou recortar) um texto pode ser incorporada num ficheiro PS de várias formas. Agora, os tipos de fonte TrueType e Type3 são suportados na incorporação.

A quarta opção é a possibilidade de escrever os glifos do texto com avanços (larguras) atribuídos. Isto permite adicionar um toque artístico ao texto.

No exemplo abaixo, demonstramos a utilização de vários métodos para adicionar texto num documento PS com a biblioteca Aspose.Page para .NET.

Um algoritmo para adicionar texto num novo documento PS inclui os seguintes passos:

  1. Criar um fluxo de saída para o ficheiro PS resultante.
  2. Criar PsSaveOptions. Se utilizarmos uma fonte personalizada, adicionaremos pasta(s) de fontes personalizadas nas opções de guardar.
  3. Criar PsDocument com o fluxo de saída já criado e as opções de guardar.
  4. Criar a fonte necessária, system ou custom.
  5. Preencher ou contornar o texto com o tipo de letra criado. Aqui, podemos atribuir System.Drawing.Brush ou System.Drawing.Pen, dependendo se vamos preencher ou desenhar o texto. Ou podemos preencher e contornar o texto num único método. Se utilizarmos o método sem System.Drawing.Brush ou System.Drawing.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.

Neste trecho de código, criamos um fluxo de saída e PsSaveOptions, adicionamos uma pasta de fontes personalizadas para utilizar a fonte personalizada no código, criamos um objeto PsDocument, definimos o texto comum a todos os métodos como uma variável de string e criamos a variável fontSize, que também é utilizada em todos os métodos utilizados.

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

Aqui demonstramos 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 the sysem font (located in system fonts folders) for filling the text //////////////////
2    Font font = new Font("Times New Roman", fontSize, FontStyle.Bold);
3    //Fill the text with the default or already defined color. In given case it is black.
4    document.FillText(str, font, 50, 100);
5    //Fill the text with Blue color.
6    document.FillText(str, font, 50, 150, new SolidBrush(Color.Blue));
7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Para Linux, MacOS e outros sistemas operativos não Windows, oferecemos a utilização do nosso pacote NuGet Aspose.Page.Drawing. Utiliza o backend Aspose.Drawing em vez da biblioteca de sistema System.Drawing.

Assim, importe o namespace Aspose.Page.Drawing em vez do System.Drawing. Nos excertos de código acima e seguintes, será utilizado Aspose.Page.Drawing.Font em vez de System.Drawing.Font, Aspose.Page.Drawing.SolidBrush será utilizado em vez de System.Drawing.SolidBrush e assim por diante. Os nossos exemplos de código no GitHub contêm todas as substituições necessárias.

O resultado

Adicionar texto imagem1

Adicionar texto imagem2

Agora, preenchemos o texto com a fonte personalizada.

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

O resultado

Adicionar texto imagem 3

Adicionar texto imagem 4

Aqui, demonstramos a utilização da fonte do sistema para contornar o texto com o traço atual do estado gráfico (i.e., preto) e com a nova Caneta.

1////////////////////////////////////// Using the sysem font (located in system fonts folders) for outlining the text ////////////////
2	  //Outline the text with default or already defined pen. In the given case it is a black colored 1-points width pen.
3	  document.OutlineText(str, font, 50, 300);
4	  //Outline the text with the blue-violet colored 2-points width pen.
5	  document.OutlineText(str, font, 50, 350, new Pen(new SolidBrush(Color.BlueViolet), 2));
6/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

O resultado

Adicionar texto imagem 5

Adicionar texto imagem 6

Agora, contornamos o texto com a fonte personalizada.

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

O resultado

Adicionar texto imagem 8

Adicionar texto imagem 9

Aqui, demonstramos a utilização da fonte do sistema para preencher e contornar o texto com os novos SolidBrush e Pen.

1    //Fill the text with the orange color and stroke with the blue colored 2-points width pen.
2    document.FillAndStrokeText(str, font, 50, 400, new SolidBrush(Color.Yellow), new Pen(new SolidBrush(Color.BlueViolet), 2));

O resultado

Adicionar texto imagem7

Agora, 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 pen.
2		document.FillAndStrokeText(str, drFont, 50, 550, new SolidBrush(Color.Orange), new Pen(new SolidBrush(Color.Blue), 2));

O resultado

Adicionar texto imagem10

E, por fim, preenchemos o texto atribuindo as larguras dos glifos. O número de larguras deve ser igual ao número de glifos.

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

O resultado

Adicionar texto image11

Feche a página atual e guarde o documento.

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

Veja como trabalhar com texto em documentos PS em Java.


No exemplo acima, as fontes utilizadas são 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 como se mostra abaixo:

1		//Do not embed used fonts.
2		options.EmbedFonts = false;
1		//Embed used fonts as Type3 fonts.
2		options.EmbedFontsAs = 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.