印刷チケット結合
重要
Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。
詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください。
印刷ドライバーで処理される PrintTicket オブジェクトには、関連付けられているドキュメント パーツに基づく階層リレーションシップがあります。 次の図は、XPS ドキュメント内のこれらのパーツの関係を示しています。
階層内の各印刷チケット レベルには、異なるスコープがあります。 印刷チケット情報を使用する印刷ドライバー フィルター モジュールは、印刷チケット オブジェクトがドキュメント ストリームから読み取られるとき、そのスコープを維持する必要があります。 次の図は、印刷ドライバー フィルター モジュールでこれを行う方法を示しています。
ドキュメント パーツがフィルターによって読み取られた場合、印刷チケット オブジェクトは、各ドキュメント パーツを処理する方法を構成するために、フィルターによって読み取り、マージ、検証およびキャッシュされます。 前の図は、さまざまな印刷チケット レベルがどのように論理的にマージされるかを示しています。次の擬似コードは、このマージの実装方法を示しています。
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
}
};