次の方法で共有


印刷チケット結合

重要

プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。

詳細については、プリントサポートアプリデザインガイド.

印刷ドライバーで処理される PrintTicket オブジェクトには、関連付けられているドキュメント パーツに基づく階層リレーションシップがあります。 次の図は、XPS ドキュメント内のこれらのパーツの関係を示しています。

diagram illustrating document parts in an xps document.

階層内の各印刷チケット レベルには、異なるスコープがあります。 印刷チケット情報を使用する印刷ドライバー フィルター モジュールは、印刷チケット オブジェクトがドキュメント ストリームから読み取られるとき、そのスコープを維持する必要があります。 次の図は、印刷ドライバー フィルター モジュールでこれを行う方法を示しています。

diagram illustrating how the different print ticket levels are logically merged .

ドキュメント パーツがフィルターによって読み取られた場合、印刷チケット オブジェクトは、各ドキュメント パーツを処理する方法を構成するために、フィルターによって読み取り、マージ、検証およびキャッシュされます。 前の図は、さまざまな印刷チケット レベルがどのように論理的にマージされるかを示しています。次の擬似コードは、このマージの実装方法を示しています。

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
    }
};