Arbeiten mit gedruckten Tickets | C++

Schema drucken

XPS-Dokumente und das XPS-Objektmodell können die in der Druckschemaspezifikation beschriebenen Druckticketobjekte verwenden, um die Druckeinstellungen eines Dokuments für Drucker und Anzeigeanwendungen anzugeben.

Das Druckschema ist ein XML-basiertes Schema, das hierarchisch strukturiert ist und zum Organisieren und Beschreiben der Eigenschaften eines Druckers oder Druckauftrags verwendet wird. Es besteht aus zwei Hauptkomponenten: den Print Schema Keywords und dem Print Schema Framework. Die Druckschema-Schlüsselwörter sind Elementinstanzen, die Druckerattribute und die Formatierungsabsicht des Druckauftrags beschreiben, während das Druckschema-Framework eine Sammlung von XML-Elementtypen in einer hierarchischen Struktur definiert und angibt, wie diese Elementtypen zusammen verwendet werden können.

Die Print Schema-Technologie namens PrintTicket wird unter Verwendung der Print Schema-Schlüsselwörter erstellt, wie sie vom Print Schema Framework angegeben werden. Die Print Schema-Spezifikation unterstützt Schemaerweiterungen von Drittanbietern, sodass Print Schema-Benutzer nicht auf die Instanzen Property, Feature, Option oder ParameterInit beschränkt sind, die durch die Print Schema-Schlüsselwörter definiert werden. Elementinstanzen von Drittanbietern können zu Elementinstanzen hinzugefügt werden, die durch die Print Schema Keywords definiert werden. Allerdings müssen private Property-Instanzen von Drittanbietern zu einem Namespace gehören, der eindeutig mit dem Drittanbieter verknüpft ist, der den Namespace erstellt hat.

Die Print Ticket-Unterstützung in Aspose.Page für C++

Die Aspose.Page-API für C++ enthält eine Reihe von Klassen, die durch die Print Schema Keywords definierte Elemente kapseln. Da die Anzahl dieser Klassen recht groß ist, behandelt dieser Artikel nur einige der gängigsten Techniken zum Bearbeiten von Drucktickets in einem XPS-Dokument mithilfe der Aspose.Page-API. Wir besprechen zunächst die Instanziierung jeder Feature-Class, die wir in das Druckticket aufnehmen möchten. Anschließend erfahren Sie, wie Sie diese Funktionen in ein gedrucktes Ticket integrieren.

So geben Sie das Eingabefach an

Die Funktion JobInputBin beschreibt den installierten Eingabebehälter in einem Gerät oder die vollständige Liste der unterstützten Behälter für ein Gerät. Es ermöglicht die Angabe des Eingabefachs für jeden Auftrag. Es gibt auch die Funktionen DocumentInputBin und PageInputBin, die die Angabe des Eingabefachs pro Dokument bzw. pro Seite ermöglichen. Jedes gedruckte Ticketdokument sollte nur eines der drei enthalten. Alle erben von der Klasse InputBin und haben Konstruktoren mit derselben Signatur, daher verwenden wir JobInputBin zu Demonstrationszwecken.

Der folgende Code

1new JobInputBin(InputBin.InputBinOption.AutoSelect);

erstellt eine Funktion für ein Auftragsdruckticket, die ein Druckgerät anweist, basierend auf der Konfiguration automatisch die beste Option auszuwählen.

Die Klasse InputBin.InputBinOption definiert statische Felder, die jeweils als Basis für verschiedene Eingabebin-Optionen dienen. Jede Option kann zusätzliche Eigenschaften wie InputBin.BinType, InputBin.FeedDirection, InputBin.FeedFace enthalten. InputBin.FeedType, InputBin.MediaCapacity, InputBin.MediaPath, InputBin.MediaSizeAutoSense, InputBin.MediaTypeAutoSense und InputBin.MediaSheetCapacity. Um sie anzugeben, sollten Sie zunächst die Basiseigenschaft klonen und dann die Methode „Add()“ mit einer Liste der gewünschten Eigenschaften aufrufen:

1new JobInputBin(InputBin.InputBinOption.Manual.Clone().Add(
2    InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100)));

Die vollständige Liste der verfügbaren Eigenschaftswerte finden Sie in der Print Schema Specification und im entsprechenden Abschnitt der Aspose.Page API-Referenz.

So geben Sie das Ausgabefach an

Die Funktion JobOutputBin beschreibt das installierte Ausgabefach in einem Gerät oder die vollständige Liste der unterstützten Fächer für ein Gerät. Die Schlüsselwörter „JobOutputBin“, DocumentOutputBin und PageOutputBin schließen sich gegenseitig aus; In einem einzelnen Druckticket sollte nur eines angegeben werden.

Jede Option kann die folgenden Eigenschaften enthalten: OutputBin.BinType und OutputBin.MediaSheetCapacity. Somit kann ein „JobOutputBin“-Feature wie folgt aufgebaut werden:

1new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
2    new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100)));

So legen Sie die Seitenausrichtung fest

Die Funktion PageOrientation beschreibt die Ausrichtung des physischen Medienblatts. Die verfügbaren Optionen sind im Klassenabschnitt PageOrientation.PageOrientationOption der API-Referenz aufgeführt. Nachfolgend finden Sie ein Beispiel für den Aufbau der Funktion:

1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);

So legen Sie den Duplexmodus für die Ausgabe fest

Die Funktion JobDuplexAllDocumentsContiguously beschreibt die Duplexeigenschaften der Ausgabe. Die Duplexfunktion ermöglicht das Drucken auf beiden Seiten des Mediums. Alle Dokumente im Auftrag werden zusammenhängend duplexiert. „JobDuplexAllDocumentsContiguously“ und DocumentDuplex schließen sich gegenseitig aus. Es liegt am Treiber, die Einschränkungsbehandlung zwischen diesen Schlüsselwörtern zu bestimmen. Das letztere Schlüsselwort bedeutet, dass jedes Dokument im Auftrag separat duplexiert wird.

Für diese Funktion gibt es drei Optionen: „OneSided“, „TwoSidedLongEdge“ und „TwoSidedShortEdge“. Der erste hat keine Eigenschaften und die anderen beiden sind mit Duplex.DuplexMode parametrisiert.

Wenn Sie beispielsweise für Ihre XPS-Datei den beidseitigen Druck festlegen möchten, sodass die Seite parallel zur MediaSizeHeight gespiegelt wird, können Sie dies wie folgt tun:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.TwoSidedLongEdge(Duplex.DuplexMode.Automatic));

Wenn Sie nicht möchten, dass Ihre Datei doppelseitig gedruckt wird, können Sie dem Druckticket die folgende Funktion hinzufügen:

1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);

So legen Sie Farbeinstellungen für die Ausgabe fest

Die Funktion PageOutputColor beschreibt die Eigenschaften der Farbeinstellungen für die Ausgabe. Es gibt drei Optionen für diese Funktion – „Farbe“, „Graustufen“ und „Monochrom“, von denen jede zwei ganzzahlige Eigenschaften hat – „DeviceBitsPerPixel“ und „DriverBitsPerPixel“.

Wenn Sie beispielsweise möchten, dass Ihr Farbdrucker eine XPS-Datei in Graustufen druckt, können Sie dem Druckticket die folgende Funktion hinzufügen:

1new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8));

So arbeiten Sie mit gedruckten Tickets unterschiedlicher Stufen

Wenn Sie mit einer XPS-Datei arbeiten, die von jemand anderem erstellt wurde, möchten Sie möglicherweise das Druckticket ändern, falls es vorhanden ist. Um ein Druckticket auf Auftragsebene zu erhalten, können Sie einfach die Eigenschaft JobPrintTicket des Objekts „XpsDocument“ verwenden:

1JobPrintTicket pt = document.JobPrintTicket;

Um ein Druckticket für ein bestimmtes Dokument in der XPS-Datei zu erhalten, sollten Sie die Methode GetDocumentPrintTicket() verwenden:

1DocumentPrintTicket pt = document.GetDocumentPrintTicket(<n>);

Dabei ist <n> die Nummer des Dokuments in der XPS-Datei.

Um ein Druckticket für eine bestimmte Seite in der XPS-Datei zu erhalten, sollten Sie die Methode GetPagePrintTicket() verwenden:

1PagePrintTicket pt = document.GetPagePrintTicket(<m>, <n>);

Dabei ist <m> die Nummer des Dokuments in der XPS-Datei und <n> die Nummer der Seite im m-ten Dokument.

Nachdem Sie eine Druckticket-Instanz erhalten haben und diese nicht „null“ ist, können Sie Ihre Features hinzufügen, die wie in den obigen Abschnitten gezeigt aufgebaut sind:

1pt.Add(<features>);

Dabei ist <Features> ein Array variabler Länge von Features, die für das Druckticket der jeweiligen Ebene geeignet sind. Wenn das alte Druckticket bereits über einige der Funktionen verfügte, die Sie hinzufügen möchten, werden diese durch die neuen Instanzen überschrieben.

Wenn Sie bestehende Drucktickets nicht ändern, sondern eine völlig neue Instanz zuweisen möchten (was auch bei einer neuen XPS-Datei der Fall ist), sollten Sie für das Druckticket auf Jobebene erneut die Eigenschaft „JobPrintTicket“ verwenden :

1document.JobPrintTicket = new JobPrintTicket(<features>);

Dabei ist <Features> ein Array variabler Länge von Features, die für das Auftragsdruckticket geeignet sind. Falls Sie ein Druckticket für ein bestimmtes Dokument innerhalb der XPS-Datei zuweisen möchten, sollte die Methode SetDocumentPrintTicket() verwendet werden:

1document.SetDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));

Dabei ist <n> die Nummer des Dokuments in der XPS-Datei und <Features> ein Array variabler Länge von Features, die für das Druckticket auf Dokumentebene geeignet sind.

Wenn Sie schließlich ein Druckticket für eine bestimmte Seite innerhalb der XPS-Datei zuweisen möchten, sollten Sie die Methode SetPagePrintTicket() verwenden:

1document.SetPagePrintTicket(<m>, <n>, new PagePrintTicket(<features>));

Dabei ist <m> die Nummer des Dokuments in der XPS-Datei, <n> die Nummer der Seite im m-ten Dokument und <Features> ein Array geeigneter Features variabler Länge für das Druckticket auf Seitenebene.

Nachfolgend finden Sie das vollständige Codebeispiel für das Druckticket auf Jobebene aus dem Beispielprojekt Aspose.Page für C++:

 1    // ExStart:CreateCustomPrintTicket
 2    // For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-.NET
 3    // The path to the documents directory.
 4    System::String dir = RunExamples::GetDataDir_WorkingWithPrintTickets();
 5    
 6    // Create new XPS document
 7    {
 8        System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>();
 9        // Clearing resources under 'using' statement
10        System::Details::DisposeGuard<1> __dispose_guard_0({ document});
11        // ------------------------------------------
12        
13        try
14        {
15            // Set a custom job-level print ticket
16            document->set_JobPrintTicket(System::MakeObject<JobPrintTicket>(
17				System::MakeArray<System::SharedPtr<IJobPrintTicketItem>>({
18						// Specify input bin.
19						System::MakeObject<JobInputBin>(System::MakeArray<System::SharedPtr<InputBin::IInputBinItem>>({InputBin::InputBinOption::Manual->Clone()->Add(System::MakeArray<System::SharedPtr<InputBin::IInputBinOptionItem>>(
20							{InputBin::FeedFace::FaceDown, InputBin::FeedDirection::LongEdgeFirst, System::MakeObject<InputBin::MediaSheetCapacity>(100)}))})), 
21						// Specify output bin.
22						System::MakeObject<JobOutputBin>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinItem>>({
23								System::MakeObject<OutputBin::OutputBinOption>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinOptionItem>>(
24									{OutputBin::BinType::Sorter})),
25								System::MakeObject<OutputBin::OutputBinOption>(System::MakeArray<System::SharedPtr<OutputBin::IOutputBinOptionItem>>(
26									{OutputBin::BinType::Stacker, System::MakeObject<OutputBin::MediaSheetCapacity>(100)}))})),
27						// Specify page orientation.
28						System::MakeObject<PageOrientation>(System::MakeArray<System::SharedPtr<PageOrientation::PageOrientationOption>>(
29							{PageOrientation::PageOrientationOption::Landscape})),
30						// Specify duplex mode for the output.
31						System::MakeObject<JobDuplexAllDocumentsContiguously>(System::MakeArray<System::SharedPtr<Duplex::DuplexOption>>(
32							{Duplex::DuplexOption::TwoSidedLongEdge(Duplex::DuplexMode::Automatic)})), 
33						// Specify the color settings for the output.	
34						System::MakeObject<PageOutputColor>(System::MakeArray<System::SharedPtr<PageOutputColor::IPageOutputColorItem>>(
35							{PageOutputColor::PageOutputColorOption::Grayscale(0, 8)}))})));
36            
37            // Save the document with the custom job-level print ticket.
38            document->Save(dir + u"output1.xps");
39        }
40        catch(...)
41        {
42            __dispose_guard_0.SetCurrentException(std::current_exception());
43        }
44    }
45    // ExEnd:CreateCustomPrintTicket

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.