Trabalhar com texto em ficheiro PS | Java
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 Java oferece métodos para utilizar tipos de letra do sistema e personalizados.
Para utilizar fontes do sistema, basta preencher ou contornar um texto com java.awt.Font nativo do Java. 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 java.awt.Font("Times New Roman", java.awt.Font.BOLD, fontSize), 50, 100);
Para utilizar tipos de letra personalizados, adicione primeiro a pasta custom fonts em PsSaveOptions e, em seguida, procure com.aspose.page.font.DrFont. E, por fim, preencha ou contorne o texto com este objeto 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);
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 ser incorporada ou não neste ficheiro.
No primeiro caso, o texto será sempre renderizado em qualquer visualizador ou editor PostScript, uma vez que está 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 atribuídos (larguras). 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 Java.
Um algoritmo para adicionar texto num novo documento PS inclui os seguintes passos:
- Criar um fluxo de saída para o ficheiro PS resultante.
- Criar PsSaveOptions. Se utilizarmos uma fonte personalizada, adicionaremos pasta(s) de fontes personalizadas nas opções de guardar.
- Criar PsDocument com o fluxo de saída já criado e as opções de guardar.
- Criar a fonte necessária, sistema ou personalizada.
- Preencher ou contornar o texto com o tipo de letra criado. Aqui, podemos atribuir java.awt.Paint ou java.awt.Stroke, consoante preenchemos ou desenhamos o texto. Ou podemos preencher e contornar o texto num único método. Se utilizarmos um método sem java.awt.Paint ou java.awt.Stroke, 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.
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 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);
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 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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
O resultado
Agora preenchemos o texto com a fonte personalizada.
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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
O resultado
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 o novo Traço.
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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
O resultado
Agora, contornamos o texto com a fonte personalizada.
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///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
O resultado
Aqui, demonstramos a utilização da fonte do sistema para preencher e contornar o texto com os novos SolidBrush e 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);
O resultado  Agora preenchemos e contornamos o texto com a fonte personalizada.
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);
O resultado
Por fim, preenchemos o texto atribuindo larguras aos 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 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);
O resultado
Feche a página atual e guarde o documento.
1//Close the current page
2document.closePage();
3
4//Save the document
5document.save();
Veja como trabalhar com texto em documentos PS em .NET.
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.
2options.setEmbedFonts(false);
1//Embed used fonts as Type3 fonts.
2options.setEmbedFontsAs(FontConstants.EMBED_FONTS_TYPE3);
Pode descarregar exemplos e ficheiros de dados do GitHub.