Arbeiten mit Text in PostScript | C++

Fügen Sie Text im PS-Dokument hinzu

In diesem Artikel betrachten wir die Möglichkeiten, wie ein Text zu einem PS-Dokument hinzugefügt werden kann.

Natürlich sollte der Text in einem Dokument mit einer bestimmten Schriftart geschrieben werden. Schriftarten können in Systemordnern gespeichert werden, und in diesem Fall nennen wir sie Systemschriftarten und können in benutzerdefinierten Ordnern gespeichert werden, also Ordnern, in denen jemand Schriftarten für eine bestimmte Verwendung ablegt. Normalerweise fehlen diese Schriftarten in Systemordnern. Wir nennen solche Schriftarten benutzerdefinierte Schriftarten. Die Aspose.Page for C++-Bibliothek bietet Methoden für die Verwendung von System- und benutzerdefinierten Schriftarten.

Um Systemschriftarten zu verwenden, füllen oder umreißen wir einfach einen Text mit System.Drawing.Font von nativem C++. Die Zahlen im Methodenaufruf sind die X- und Y-Koordinaten der oberen linken Ecke des Textes.

1document->FillText(str, System::MakeObject<System::Drawing::Font>(u"Times New Roman", static_cast<float>(fontSize), System::Drawing::FontStyle::Bold), 50.0f, 100.0f);

Um benutzerdefinierte Schriftarten zu verwenden, fügen Sie zuerst den Ordner benutzerdefinierte Schriftarten in PsSaveOptions hinzu und rufen Sie dann Aspose.Page.Font.DrFont ab. Und schließlich füllen oder umreißen Sie den Text mit diesem DrFont-Objekt.

1options->set_AdditionalFontsFolders(System::MakeArray<System::String>({FONTS_FOLDER}));
2System::SharedPtr<DrFont> drFont = ExternalFontCache::FetchDrFont(u"Palatino Linotype", static_cast<float>(fontSize), System::Drawing::FontStyle::Regular);
3document->FillText(str, drFont, 50.0f, 200.0f);

Eine weitere Möglichkeit besteht darin, mit Text zu arbeiten, der ebenfalls zu einer Schriftart gehört. Die Schriftart, die zum Drucken von Text im PostScript-Dokument verwendet wird, kann in diese Datei eingebettet werden oder nicht. Im ersten Fall wird der Text immer in jedem PostScript-Viewer oder -Editor gerendert, da er immer beim Text liegt. Im zweiten Fall sollten wir davon ausgehen, dass die verwendete Schriftart in Systemordnern auf dem Zielhost vorhanden ist. Wenn die verwendete Schriftart nicht vorhanden ist, kann der PostScript-Interpreter einen Fehler auslösen.

Bei der dritten Option geht es ebenfalls um eine Schriftart, da beim Hinzufügen von Text die Schriftart ausschlaggebend ist. Eine zum Füllen oder Zeichnen (oder Ausschneiden) eines Textes verwendete Schriftart kann in verschiedenen Formen in eine PS-Datei eingebettet werden. Jetzt werden TrueType- und Type3-Schriftarten beim Einbetten unterstützt.

Die vierte Option ist die Möglichkeit, die Glyphen des Textes mit zugewiesenen Vorsprüngen (Breiten) zu schreiben. Es ermöglicht, dem Text etwas Kunst zu verleihen.

Im folgenden Beispiel demonstrieren wir die Verwendung verschiedener Methoden zum Hinzufügen von Text in einem PS-Dokument mit der Aspose.Page für C++-Bibliothek.

Ein Algorithmus zum Hinzufügen eines Textes in ein neues PS-Dokument umfasst die folgenden Schritte:

  1. Erstellen Sie einen Ausgabestream für die resultierende PS-Datei.
  2. Erstellen Sie PsSaveOptions. Wenn wir eine benutzerdefinierte Schriftart verwenden, fügen wir in den Speicheroptionen Ordner für benutzerdefinierte Schriftarten hinzu.
  3. Erstellen Sie PsDocument mit dem bereits erstellten Ausgabestream und den Speicheroptionen.
  4. Erstellen Sie die erforderliche Schriftart, System oder Benutzerdefiniert.
  5. Füllen oder umranden Sie den Text mit der erstellten Schriftart. Hier können wir System.Drawing.Brush oder System.Drawing.Pen zuweisen, je nachdem, ob wir den Text füllen oder zeichnen. Oder wir können den Text in einer Methode ausfüllen und umreißen. Wenn wir die Methode ohne System.Drawing.Brush oder System.Drawing.Pen verwenden, wird der Text im aktuellen Grafikstatus mit der aktuellen Farbe/Strich gefüllt oder umrandet.
  6. Schließen Sie die Seite.
  7. Speichern Sie das Dokument.

Wir haben den Beispielcode in kleine Codeschnipsel aufgeteilt, um die anfängliche Vorbereitung für das PS-Dokument, die Verwendung aller Methoden zum Hinzufügen von Text und die Fertigstellung des Dokuments zu trennen.

In diesem Codeteil erstellen wir einen Ausgabestream und PsSaveOptions, fügen einen benutzerdefinierten Schriftartenordner für die Verwendung der benutzerdefinierten Schriftart im Code hinzu, erstellen ein PsDocument-Objekt, legen den für alle Methoden gemeinsamen Text als Zeichenfolgenvariable fest und erstellen die Variable „fontSize“. wird auch in jeder verwendeten Methode verwendet.

 1    // The path to the documents directory.
 2    System::String dataDir = RunExamples::GetDataDir_WorkingWithText();
 3    
 4    System::String FONTS_FOLDER = RunExamples::GetDataDir_Data() + u"necessary_fonts/";
 5    
 6    //Create output stream for PostScript document
 7    {
 8        System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddText_outPS.ps", System::IO::FileMode::Create);
 9        // Clearing resources under 'using' statement
10        System::Details::DisposeGuard<1> __dispose_guard_0({ outPsStream});
11        // ------------------------------------------
12        
13        try
14        {
15            //Create save options with A4 size
16            System::SharedPtr<PsSaveOptions> options = System::MakeObject<PsSaveOptions>();
17            // Set custom fonts folder. It will be added to system fonts folders for finding needed font.
18            options->set_AdditionalFontsFolders(System::MakeArray<System::String>({FONTS_FOLDER}));
19            //A text to write to PS file
20            System::String str = u"ABCDEFGHIJKLMNO";
21            int32_t fontSize = 48;
22            
23            // Create new 1-paged PS Document
24            System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(outPsStream, options, false);

Hier demonstrieren wir die Verwendung der Systemschriftart zum Füllen des Textes mit der aktuellen Farbe des Grafikstatus (also Schwarz) und mit dem neuen SolidBrush.

1            ////////////////////////////////////// Using sysem font (located in system fonts folders) for filling text //////////////////
2            System::SharedPtr<System::Drawing::Font> font = System::MakeObject<System::Drawing::Font>(u"Times New Roman", static_cast<float>(fontSize), System::Drawing::FontStyle::Bold);
3            //Fill text with default or already defined color. In given case it is black.
4            document->FillText(str, font, 50.0f, 100.0f);
5            //Fill text with Blue color.
6            document->FillText(str, font, 50.0f, 150.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
7            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Das Ergebnis

Text Bild1 hinzufügen

Text Bild2 hinzufügen Jetzt füllen wir den Text mit der benutzerdefinierten Schriftart.

1            ////////////////////////////////////// Using custom font (located in custom fonts folders) for filling text /////////////////
2            System::SharedPtr<DrFont> drFont = ExternalFontCache::FetchDrFont(u"Palatino Linotype", static_cast<float>(fontSize), System::Drawing::FontStyle::Regular);
3            //Fill text with default or already defined color. In given case it is black.
4            document->FillText(str, drFont, 50.0f, 200.0f);
5            //Fill text with Blue color.
6            document->FillText(str, drFont, 50.0f, 250.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
7            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Das Ergebnis

Textbild hinzufügen3

Textbild hinzufügen4

Hier demonstrieren wir die Verwendung der Systemschriftart zum Umreißen des Textes mit dem aktuellen Strich des Grafikzustands (also schwarz) und mit dem neuen Stift.

1            ////////////////////////////////////// Using sysem font (located in system fonts folders) for outlining text ////////////////
2            //Outline text with default or already defined pen. In given case it is black colored 1-points width pen.
3            document->OutlineText(str, font, 50.0f, 300.0f);
4            //Outline text with blue-violet colored 2-points width pen.
5            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));
6            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Das Ergebnis

Text hinzufügen image5

Text hinzufügen image6

Jetzt umreißen wir den Text mit der benutzerdefinierten Schriftart.

1            ////////////////////////////////////// Using custom font (located in custom fonts folders) for outlining text /////////////////
2            //Outline text with default or already defined pen. In given case it is black colored 1-points width pen.
3            document->OutlineText(str, drFont, 50.0f, 450.0f);
4            //Outline text with blue-violet colored 2-points width pen.
5            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));
6            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Das Ergebnis

Text hinzufügen image8

Textbild hinzufügen9

Hier demonstrieren wir die Verwendung der Systemschriftart zum Füllen und Umreißen des Textes mit dem neuen SolidBrush und Pen.

1            //Fill text with orange color and stroke with blue colored 2-points width pen.
2            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));

Das Ergebnis

Textbild hinzufügen7

Jetzt füllen wir den Text aus und umreißen ihn mit der benutzerdefinierten Schriftart.

1            //Fill text with orange color and stroke with blue colored 2-points width pen.
2            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));

Das Ergebnis

Text hinzufügen image10

Und schließlich füllen wir den Text mit der Zuweisung von Glyphenbreiten. Die Anzahl der Breiten muss der Anzahl der Glyphen entsprechen.

1            //Glyphs widths
2            System::ArrayPtr<float> widths = System::MakeArray<float>({87, 87, 87, 87, 34, 87, 87});
3            //Fill ASCII text using with assigning glyphs widths.
4            document->FillText(u"BAMBOOK", widths, drFont, 50.0f, 600.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Blue()));
5
6            //Glyphs widths
7            widths = System::MakeArray<float>({87, 34, 87, 87, 87, 87, 87});
8            //Fill Unicode text using with assigning glyphs widths.
9            document->FillText(u"ЗООПАРК", widths, drFont, 50.0f, 650.0f, System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Orange()));

Das Ergebnis

Text hinzufügen image11

Schließen Sie die aktuelle Seite und speichern Sie das Dokument.

 1            //Close current page
 2            document->ClosePage();
 3            
 4            //Save the document
 5            document->Save();
 6        }
 7        catch(...)
 8        {
 9            __dispose_guard_0.SetCurrentException(std::current_exception());
10        }
11    }

Weitere Informationen finden Sie unter „Arbeiten mit Text in PS-Dokumenten“ in Java.


Im obigen Beispiel werden Schriftarten verwendet, die als TrueType-Schriftarten in die PostScript-Datei eingebettet sind, da dies das Standardverhalten beim Speichern von Schriftarten in der PsDocument-Klasse ist. Wenn Sie dieses Verhalten ändern müssen, verwenden Sie bitte PsSaveOptions wie folgt:

1		//Do not embed used fonts.
2		options->set_EmbedFonts(false);
1		//Embed used fonts as Type3 fonts.
2		options->set_EmbedFontsAs(FontConstants::EMBED_FONTS_TYPE3);

Sie können Beispiele und Datendateien herunterladen von GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.