Lavorare con il testo in PostScript | .NET

Aggiungere testo in un documento PS

In questo articolo, consideriamo i modi in cui è possibile aggiungere testo a un documento PS.

Ovviamente, il testo deve 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 .NET offre metodi per utilizzare sia font di sistema che personalizzati.

Per utilizzare i font di sistema, è sufficiente riempire o delineare un testo con il System.Drawing.Font nativo di .NET. I numeri nella chiamata del metodo rappresentano le coordinate x e y dell’angolo in alto a sinistra del testo.

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

Per utilizzare font personalizzati, aggiungi prima la cartella custom fonts in PsSaveOptions, quindi recupera Aspose.Page.Font.DrFont. Infine, riempi o delinea il testo con questo oggetto 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);

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 meno. 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 ritagliare) un testo può essere incorporato in un file PS in vari formati. Ora sono supportati i tipi di 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 .NET.

Un algoritmo per aggiungere testo in un nuovo documento PS include i seguenti passaggi:

  1. Creare un flusso di output per il file PS risultante.
  2. Creare PsSaveOptions. Se utilizziamo un font personalizzato, aggiungiamo le relative cartelle nelle opzioni di salvataggio.
  3. Creare PsDocument con il flusso di output già creato e le relative opzioni di salvataggio.
  4. Creare il font desiderato, system o custom.
  5. Riempire o delineare il testo con il font creato. Qui possiamo assegnare System.Drawing.Brush o System.Drawing.Pen a seconda che si desideri riempire o disegnare il testo. Oppure possiamo riempire e delineare il testo con un unico metodo. Se utilizziamo il metodo senza System.Drawing.Brush o System.Drawing.Pen, il testo verrà riempito o contornato con il colore/tratto corrente nello stato grafico corrente.
  6. Chiudiamo la pagina.
  7. Salviamo il documento.

Abbiamo suddiviso il codice di esempio in piccoli frammenti di codice per separare la preparazione iniziale del 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 in ogni metodo utilizzato.

 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);

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 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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Per Linux, macOS e altri sistemi operativi non Windows, offriamo l’utilizzo del nostro pacchetto Nuget Aspose.Page.Drawing. Utilizza il backend Aspose.Drawing anziché la libreria di sistema System.Drawing.

Quindi, importate lo spazio dei nomi Aspose.Page.Drawing anziché quello System.Drawing. Nei frammenti di codice sopra e nei seguenti verrà utilizzato Aspose.Page.Drawing.Font al posto di System.Drawing.Font, Aspose.Page.Drawing.SolidBrush al posto di System.Drawing.SolidBrush e così via. I nostri esempi di codice su GitHub contengono tutte le sostituzioni necessarie.

Il risultato

Aggiungi testo immagine1

Aggiungi testo immagine2

Ora riempiamo il testo con il font personalizzato.

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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Il risultato

Aggiungi testo immagine3

Aggiungi testo immagine4

Qui mostriamo l’utilizzo del font di sistema per delineare il testo con il tratto corrente dello stato grafico (ovvero nero) e con la nuova Penna.

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/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Il risultato

Aggiungi testo immagine5

Aggiungi testo immagine6

Ora tracciamo il contorno del testo con il font personalizzato.

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///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Il risultato

Aggiungi testo immagine8

Aggiungi testo immagine9

Qui mostriamo l’utilizzo del font di sistema per riempire e delineare il testo con i nuovi 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));

Il risultato

Aggiungi testo immagine7

Ora riempiamo e tracciamo il contorno del testo con il font personalizzato.

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));

Il risultato

Aggiungi testo immagine10

E infine riempiamo il testo assegnando le larghezze dei 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 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));

Risultato

Aggiungi testo immagine11

Chiudi la pagina corrente e salva il documento.

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

Vedi come lavorare con un testo nei documenti PS in Java.


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

È possibile scaricare esempi e file di dati da GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.