Ticket drucken und zusammenführen
Wichtig
Die moderne Druckplattform ist das bevorzugte Mittel von Windows, um mit Druckern zu kommunizieren. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.
Weitere Informationen finden Sie unter Moderne Druckplattform und im Entwurfsleitfaden für die Druckunterstützungs-App.
Die PrintTicket-Objekte, die im Druckertreiber verarbeitet werden, stehen in einer hierarchischen Beziehung zu dem Dokumententeil, mit dem sie verknüpft sind. Das folgende Diagramm veranschaulicht die Beziehung zwischen diesen Teilen innerhalb eines XPS-Dokuments.
Jede der Druckticket-Ebenen in der Hierarchie hat einen anderen Geltungsbereich. Die Druckertreiber-Filtermodule, die die Druckticket-Informationen verwenden, müssen diesen Bereich beibehalten, wenn die Druckticket-Objekte aus dem Dokumentenstrom gelesen werden. Das folgende Diagramm veranschaulicht, wie dies in einem Druckertreiber-Filtermodul geschehen kann.
Während die Dokumentteile vom Filter gelesen werden, werden die Druckticket-Objekte gelesen, zusammengeführt und validiert und vom Filter zwischengespeichert, um zu konfigurieren, wie der Filter die einzelnen Dokumentteile verarbeitet. Das vorherige Diagramm zeigt, wie die verschiedenen Druckticket-Ebenen logisch zusammengeführt werden. Der Pseudocode unten veranschaulicht, wie diese Zusammenführung implementiert werden könnte.
class Filter
{
PrintTicket Saved_FDS_PT;
PrintTicket Saved_FD_PT;
ProcessFDS(pIFixedDocumentSequence)
{
Saved_FDS_PT = pIFixedDocumentSequence->GetPrintTicket();
// continue processing the FixedDocumentSequence part
}
ProcessFD(pIFixedDocument)
{
Saved_FD_PT->Release();
temp = pIFixedDocument->GetPrintTicket();
Saved_FD_PT = PrintTicketMergeAndValidate(
Saved_FDS_PT, temp);
// continue processing the FixedDocument part
}
ProcessPage(IFixedPage)
{
temp = pIFixedPage->GetPrintTicket();
PagePT = PrintTicketMergeAndValidate(Saved_FD_PT, temp);
// continue processing the FixedPage part
}
PrintTicket PrintTicketMergeAndValidate(
ParentPT,
PartPT)
{
// Entries in the Part PrintTicket
// take precedence over the corresponding entries
// in the Parent PrintTicket
}
};