Aggiungi testo ai file PS
Soluzione API C++ per lavorare con i testi dei file PS
PostScript, un potente linguaggio di descrizione di pagina, offre un controllo granulare sul posizionamento e sulla formattazione del testo. Ecco alcune sfumature chiave da considerare quando si lavora con il testo in PostScript:
- PostScript consente di selezionare i font utilizzando i loro nomi PostScript. I font comuni come Times Roman, Helvetica e Courier sono spesso disponibili per impostazione predefinita. Per garantire un rendering coerente su diversi sistemi, è possibile incorporare i font direttamente nel file PostScript. Ciò è particolarmente importante per i font personalizzati o per le famiglie di font meno comuni.
- Dimensione e stile del font - L’operatore
fontsizeimposta la dimensione del font in punti. Per modificare gli stili del font utilizzare operatori comesetfontche specifica il grassetto, il corsivo o altre variazioni. - Posizionamento del testo - L’operatore
movetoposiziona il cursore del testo in un punto specifico della pagina. Sebbene PostScript non disponga di operatori di allineamento diretto, è possibile ottenere l’allineamento tramite calcoli accurati. - Rotazione e ridimensionamento del testo - L’operatore
rotatepuò essere utilizzato per ruotare il testo di un angolo specifico, mentre l’operatorescalepuò essere utilizzato per ingrandire o rimpicciolire il testo. - Rendering del testo - PostScript supporta l’anti-aliasing, che attenua i bordi del testo per una migliore leggibilità. È inoltre possibile controllare la spaziatura tra i caratteri (kerning) e le righe (leading) per perfezionare l’aspetto del testo.
La comprensione di questi aspetti può aiutare a garantire un uso corretto dei font e un rendering coerente nei flussi di lavoro basati su PostScript. In ogni caso, Aspose.Page ti offre la funzionalità per gestire facilmente i font dei file PS. Con questa API, puoi aggiungere testi di diversi colori e pennelli utilizzando font personalizzati o di sistema. Per saperne di più su come gestire i file PS e su come lavorare con i testi dei file PS in particolare, segui la documentazione.
Per inserire testi nei documenti PS abbiamo bisogno di:
API Aspose.Page per C++ che è un'API di manipolazione e conversione di documenti C++ ricca di funzionalità, potente e facile da usare.
Apri il gestore pacchetti NuGet, cerca Aspose.Page.Cpp e installalo. È inoltre possibile utilizzare il seguente comando dalla Console del Gestore Pacchetti.
Package Manager Console Command
PM> Install-Package Aspose.Page.Cpp
Passaggi per aggiungere testo a un file PS.
Lo snippet di codice seguente dimostra come aggiungere testo utilizzando una stringa Unicode a un documento PostScript (PS) utilizzando la libreria Aspose.Page in C++. Per vedere una versione più completa dell’esempio e altri esempi, vai al progetto GitHub Aspose.Page-for-C++ .
- Inizializza la variabile dataDir con il percorso della directory contenente i documenti.
- Imposta la variabile FONTS_FOLDER sul percorso della cartella contenente i font necessari.
- Crea un flusso di output per il documento PostScript utilizzando la classe FileStream.
- Specifica le opzioni di salvataggio per il documento PostScript utilizzando l’oggetto PsSaveOptions .
- La proprietà AdditionalFontsFolders dell’oggetto opzioni viene impostata su un array contenente il percorso di FONTS_FOLDER. Ciò consente al sistema di individuare eventuali font richiesti in quella cartella.
- Specifica il testo e la sua dimensione.
- Crea una nuova istanza di PsDocument con il flusso di output, le opzioni e false come parametri. Questo inizializza un nuovo documento PostScript con le opzioni specificate.
- Chiama il metodo ClosePage() sull’oggetto documento, indicando che la pagina corrente è stata completata.
- Usa il metodo Save() per salvare le modifiche apportate al documento PS.
Codice C++ per aggiungere testo a un file PS
// The path to the documents directory.
System::String dataDir = RunExamples::GetDataDir_WorkingWithText();
System::String FONTS_FOLDER = RunExamples::GetDataDir_Data() + u"necessary_fonts/";
//Create output stream for PostScript document
{
System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddText_outPS.ps", System::IO::FileMode::Create);
// Clearing resources under 'using' statement
System::Details::DisposeGuard<1> __dispose_guard_0({ outPsStream});
// ------------------------------------------
try
{
//Create save options with A4 size
System::SharedPtr<PsSaveOptions> options = System::MakeObject<PsSaveOptions>();
// Set custom fonts folder. It will be added to system fonts folders for finding needed font.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({FONTS_FOLDER}));
//A text to write to PS file
System::String str = u"ABCDEFGHIJKLMNO";
int32_t fontSize = 48;
// Create new 1-paged PS Document
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(outPsStream, options, false);
////////////////////////////////////// Using sysem font (located in system fonts folders) for filling text //////////////////
System::SharedPtr<System::Drawing::Font> font = System::MakeObject<System::Drawing::Font>(u"Times New Roman", static_cast<float>(fontSize), System::Drawing::FontStyle::Bold);
//Fill text with default or already defined color. In given case it is black.
document->FillText(str, font, 50.0f, 100.0f);
//Fill text with Blue color.
document->FillText(str, font, 50.0f, 150.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// Using custom font (located in custom fonts folders) for filling text /////////////////
System::SharedPtr<DrFont> drFont = ExternalFontCache::FetchDrFont(u"Palatino Linotype", static_cast<float>(fontSize), System::Drawing::FontStyle::Regular);
//Fill text with default or already defined color. In given case it is black.
document->FillText(str, drFont, 50.0f, 200.0f);
//Fill text with Blue color.
document->FillText(str, drFont, 50.0f, 250.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// Using sysem font (located in system fonts folders) for outlining text ////////////////
//Outline text with default or already defined pen. In given case it is black colored 1-points width pen.
document->OutlineText(str, font, 50.0f, 300.0f);
//Outline text with blue-violet colored 2-points width pen.
document->OutlineText(str, font, 50.0f, 350.0f, System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_BlueViolet()), 2.0f));
//Fill text with orange color and stroke with blue colored 2-points width pen.
document->FillAndStrokeText(str, font, 50.0f, 400.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Yellow()), System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_BlueViolet()), 2.0f));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// Using custom font (located in custom fonts folders) for outlining text /////////////////
//Outline text with default or already defined pen. In given case it is black colored 1-points width pen.
document->OutlineText(str, drFont, 50.0f, 450.0f);
//Outline text with blue-violet colored 2-points width pen.
document->OutlineText(str, drFont, 50.0f, 500.0f, System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_BlueViolet()), 2.0f));
//Fill text with orange color and stroke with blue colored 2-points width pen.
document->FillAndStrokeText(str, drFont, 50.0f, 550.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Orange()), System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()), 2.0f));
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// Using custom font (located in custom fonts folders) ang glyphs widths for filling text ////////
drFont = ExternalFontCache::FetchDrFont(u"Palatino Linotype", static_cast<float>(fontSize), System::Drawing::FontStyle::Regular);
//Glyphs widths
System::ArrayPtr<float> widths = System::MakeArray<float>({87, 87, 87, 87, 34, 87, 87});
//Fill ASCII text using with assigning glyphs widths.
document->FillText(u"BAMBOOK", widths, drFont, 50.0f, 600.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
///////////////////////////// Using custom font (located in custom fonts folders) ang glyphs widths for filling unicode text //
//Glyphs widths
widths = System::MakeArray<float>({87, 34, 87, 87, 87, 87, 87});
//Fill Unicode text using with assigning glyphs widths.
document->FillText(u"ЗООПАРК", widths, drFont, 50.0f, 650.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Orange()));
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Close current page
document->ClosePage();
//Save the document
document->Save();
}
catch(...)
{
__dispose_guard_0.SetCurrentException(std::current_exception());
}
}
PS Cos'è il formato file PS
PS (PostScript) è un linguaggio di descrizione di pagina che combina testo e grafica in un unico file. È ampiamente supportato da editor di immagini e stampanti, fornendo le istruzioni di rendering.