印刷とコマンドの一覧
Direct2D 印刷コントロールは、Windows 8 の Direct2D モジュールの新しいコンポーネントです。 このコンポーネントにより、Direct2D アプリは Direct2D 描画呼び出し (状態の変更とレンダリング プリミティブの観点から) を再利用して、画面に表示されるものと同様の印刷結果を提供できます。
ID2D1PrintControl インターフェイスは、仮想印刷ジョブを表します。Direct2D 印刷コントロールを作成して新しい印刷ジョブを開始し、印刷するページごとに Direct2D コンテンツを渡してから、印刷コントロールを閉じて印刷ジョブを完了できます。
Note
印刷コントロールは 1 つの印刷ジョブにのみマップされ、再利用することはできません。
Direct2D 印刷コントロールは、渡された Direct2D コンテンツを印刷サブシステムに変換および最適化し、実際のプリンターと連携して実際の印刷出力を配信します。 印刷固有の詳細はすべて Direct2D アプリから隠されているため、Direct2D アプリは、どのデバイスに描画するか、または描画がどのように印刷に変換されるかを知らなくても印刷できます。
Direct2D で印刷するには、印刷するページごとに 1 つの Direct2D コマンド リストを準備し、そのコマンド リストを Direct2D 印刷コントロールに渡す必要があります。 Direct2D コマンド リストを準備するには、現在のデバイス コンテキストの描画ターゲットとしてコマンド リストを作成して設定し、表示用のビットマップ ターゲットに描画する場合とまったく同じように、そのデバイス コンテキストに描画するだけです。 デバイスとターゲットの詳細については、「デバイスとデバイス コンテキスト」を参照してください。
次の図は、アプリ、デバイス コンテキスト、ビットマップ ターゲット、コマンド リスト ターゲット、および印刷コントロールの間の相互作用を示しています。
Note
Windows Print Sub-System コンポーネントと Printer コンポーネントは、Direct2D アプリから完全に非表示になっているため、淡色で表示されます。
例
Direct2D コンテンツを印刷する完全なプロセスには、次の手順が含まれます。
- 印刷ジョブを開始する印刷コントロールを作成します。
- コマンド リストを渡して、ページを印刷コントロールに追加します。
- ドキュメントの残りの部分の各ページに対して、手順 2 を繰り返します
- 印刷コントロールを閉じて、印刷ジョブを完了します。
以下は、そのプロセスを示すコード例です。
ID2D1CommandList* commandList;
// Skip command list creation and drawing for simplicity.
// Set print control properties.
D2D1_PRINT_CONTROL_PROPERTIES printControlProperties;
printControlProperties.rasterDPI = 150.0f; // Use the default rasterization DPI for all unsupported Direct2D commands
// or options.
printControlProperties.fontSubset = D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT; // Using the default font subset strategy.
printControlProperties.colorSpace = D2D1_COLOR_SPACE_SRGB; // Color space for vector graphics in Direct2D print control.
// Create a Direct2D Print Control to initiate a print job.
ID2D1PrintControl* d2dPrintControl;
d2dDevice->CreatePrintControl(
wicFactory,
documentTarget,
printControlProperties,
&d2dPrintControl
);
// Add Direct2D drawing commands encapsulated in a command list.
// You can add in more pages by calling this API multiple times.
d2dPrintControl->AddPage(commandList);
// Close the print control to complete a print job.
d2dPrintControl->Close();