次の方法で共有


プリント プロセッサで GDI 関数を使用する

ユーザー モード GDI 関数のセットは、NT ベースのオペレーティング システムで EMF を入力形式として処理する印刷プロセッサで使用するために、Gdi32.dll によってエクスポートされます。 次の表は、提供されている関数の一覧です。

関数名: 説明
GdiDeleteSpoolFileHandle スプール ファイル ハンドルを解放します。
GdiEndDocEMF 印刷ジョブ ドキュメントの EMF 再生操作を完了します。
GdiEndPageEMF 物理ページの EMF 再生操作を完了し、プリンターからページを取り出します。
GdiGetDC プリンターのデバイス コンテキストへのハンドルを返します。
GdiGetDevmodeForPage 文書ページの DEVMODEW 構造体を返します。
GdiGetPageCount 文書のページ数を返します。
GdiGetPageHandle ドキュメント ページへのハンドルを返します。
GdiGetSpoolFileHandle 他の GDI 関数への入力として必要なスプール ファイル ハンドルを返します。
GdiPlayPageEMF ドキュメント ページに関連付けられている EMF レコードを再生します。
GdiResetDCEMF プリンターのデバイス コンテキストをリセットします。
GdiStartDocEMF 印刷ジョブにある文書の初期化操作を実行します。
GdiStartPageEMF 物理ページの初期化操作を実行します。

EMF 印刷プロセッサの PrintDocumentOnPrintProcessor は、GdiGetSpoolFileHandle を呼び出してスプール ファイル ハンドルを取得し、GdiGetDC を呼び出してプリンターのデバイス コンテキスト ハンドルを取得する必要があります。 次に、次の手順を実行します。

  • 印刷ジョブにある文書ごとに、すべての EMF レコードを再生する前に GdiStartDocEMF を呼び出し、最後の EMF レコードの再生後に GdiEndDocEMF を呼び出す必要があります。

  • 各物理ページを印刷するには、ページにドキュメント ページを描画する前に GdiStartPageEMF を呼び出す必要があり、最後のドキュメント ページが物理ページに描画された後に GdiEndPageEMF を呼び出す必要があります。

  • 物理ページに描画する文書のページごとに GdiGetDevmodeForPage の呼び出しを行い、文書の最後のページが描画されてから DEVMODE 構造体の内容が変更されたかどうかを判断する必要があります。 DEVMODE が変更された場合、(GdiEndPageEMFGdiStartPageEMF を呼び出して) 新しい物理ページを開始し、GdiResetDCEMF を呼び出してプリンターのデバイス コンテキストを更新する必要があります。 ドキュメント ページは、最初に GdiGetPageHandle を呼び出してドキュメント ページ ハンドルを取得し、次に GdiPlayPageEMF を呼び出してページを描画することで、物理ページへの描画を行います。

ジョブが完全に描画されたら、印刷プロセッサは GdiDeleteSpoolFileHandle を呼び出す必要があります。

印刷プロセッサでページの印刷を開始する前に合計ページ数が必要な場合 (ページを逆の順序で印刷する場合など)、GdiGetPageCount を呼び出すことができますが、この関数はスプールが終了するまで戻らないため、スプーリング中の印刷機能は無効になります。

印刷プロセッサでこれらの GDI 関数を使用する場合、その EnumPrintProcessorDatatypes 関数は、サポートされているデータ型として "NT EMF" を返す必要があります。これは、汎用の Windows 2000 以降の EMF 形式を表します。 印刷プロセッサーは EMF レコードを変更できません。