Lavorare con il testo in un file PS | Java
Aggiungere testo in un documento PS
In questo articolo, consideriamo i modi in cui è possibile aggiungere testo a un documento PS.
Ovviamente, il testo dovrebbe essere scritto in un documento con un font specifico. I font possono essere memorizzati in cartelle di sistema e, in questo caso, li chiamiamo font di sistema e possono essere memorizzati in cartelle personalizzate, ovvero cartelle in cui vengono salvati font per un utilizzo specifico. Di solito, questi font non sono presenti nelle cartelle di sistema. Chiamiamo tali font font personalizzati.
La libreria Aspose.Page per Java offre metodi per utilizzare sia font di sistema che personalizzati.
Per utilizzare i font di sistema, basta riempire o delineare un testo con il codice nativo di Java java.awt.Font. I numeri nella chiamata del metodo rappresentano le coordinate x e y dell’angolo in alto a sinistra del testo.
1document.fillText(str, new java.awt.Font("Times New Roman", java.awt.Font.BOLD, fontSize), 50, 100);
Per utilizzare font personalizzati, aggiungi prima la cartella custom fonts in PsSaveOptions, quindi recupera com.aspose.page.font.DrFont. Infine, riempi o delinea il testo con questo oggetto 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);
Un’altra opzione è lavorare con testo che appartiene anche a un font. Il font utilizzato per stampare il testo nel documento PostScript può essere incorporato in questo file o non incorporato.
Nel primo caso, il testo verrà sempre visualizzato in qualsiasi visualizzatore o editor PostScript perché si trova sempre insieme al testo. Nel secondo caso, dovremmo aspettarci che il font utilizzato esista nelle cartelle di sistema sull’host di destinazione. Se il font utilizzato non esiste, l’interprete PostScript potrebbe generare un errore.
Anche la terza opzione riguarda un font, perché un font è l’elemento principale per l’aggiunta di testo. Un font utilizzato per riempire o disegnare (o anche per ritagliare) un testo può essere incorporato in un file PS in vari formati. Ora sono supportati i font TrueType e Type3 per l’incorporamento.
La quarta opzione è la possibilità di scrivere i glifi del testo con avanzamenti (larghezze) assegnati. Ciò consente di aggiungere un tocco artistico al testo.
Nell’esempio seguente mostriamo l’utilizzo di vari metodi per aggiungere testo in un documento PS con la libreria Aspose.Page per Java.
Un algoritmo per l’aggiunta di testo in un nuovo documento PS include i seguenti passaggi:
- Creare un flusso di output per il file PS risultante.
- Creare PsSaveOptions. Se utilizziamo un font personalizzato, aggiungiamo le relative cartelle nelle opzioni di salvataggio.
- Creare PsDocument con il flusso di output già creato e le relative opzioni di salvataggio.
- Creare il font desiderato, system o custom.
- Riempire o delineare il testo con il font creato. Qui possiamo assegnare java.awt.Paint o java.awt.Stroke a seconda che si desideri riempire o disegnare il testo. Oppure possiamo riempire e delineare il testo in un unico metodo. Se utilizziamo un metodo senza java.awt.Paint o java.awt.Stroke, il testo verrà riempito o contornato con il colore/tratto corrente nello stato grafico corrente.
- Chiudere la pagina.
- Salvare il documento.
Suddividiamo il codice di esempio in piccoli frammenti di codice per separare la preparazione iniziale per il documento PS, l’utilizzo di ciascun metodo per l’aggiunta di testo e il completamento del documento.
In questo frammento di codice, creiamo un flusso di output e PsSaveOptions, aggiungiamo una cartella font personalizzata per utilizzare il font personalizzato nel codice, creiamo un oggetto PsDocument, impostiamo il testo comune per tutti i metodi come variabile stringa e creiamo la variabile fontSize che viene utilizzata anche in ogni metodo utilizzato.
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);
Qui mostriamo l’utilizzo del font di sistema per riempire il testo con il colore corrente dello stato grafico (ovvero nero) e con il nuovo 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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Il risultato
Ora riempiamo il testo con il font personalizzato.
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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Il risultato
Qui mostriamo l’utilizzo del font di sistema per delineare il testo con il tratto corrente dello stato grafico (ovvero nero) e con il nuovo Tratto.
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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Il risultato
Ora tracciamo il contorno del testo con il font personalizzato.
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///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Il risultato
Qui mostriamo l’utilizzo del font di sistema per riempire e delineare il testo con i nuovi 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);
Il risultato
Ora riempiamo e tracciamo il contorno del testo con il font personalizzato.
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);
Il risultato
Infine, riempiamo il testo assegnando le larghezze ai glifi. Il numero di larghezze deve essere uguale al numero di glifi.
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);
Risultato
Chiudi la pagina corrente e salva il documento.
1//Close the current page
2document.closePage();
3
4//Save the document
5document.save();
Vedi come lavorare con un testo nei documenti PS in .NET.
Nell’esempio precedente, vengono utilizzati font incorporati nel file PostScript come font TrueType, poiché questo è il comportamento predefinito di salvataggio dei font nella classe PsDocument. Se è necessario modificare questo comportamento, utilizzare PsSaveOptions come segue:
1//Do not embed used fonts.
2options.setEmbedFonts(false);
1//Embed used fonts as Type3 fonts.
2options.setEmbedFontsAs(FontConstants.EMBED_FONTS_TYPE3);
È possibile scaricare esempi e file di dati da GitHub.