打印和命令列表

Direct2D 打印控件是 Windows 8 中 Direct2D 模块的新组件。 此组件允许 Direct2D 应用重复使用其 Direct2D 绘图调用(状态更改和渲染基元方面),以提供与屏幕上所见效果类似的打印结果。

ID2D1PrintControl 接口表示虚拟打印作业:您可以创建 Direct2D 打印控件来启动新的打印作业,传入要打印的每个页面的 Direct2D 内容,然后关闭打印控件以完成打印作业。

注意

一个打印控件映射到一个且恰好一个打印作业,您不能重复使用它。

Direct2D 打印控件为打印子系统转换并优化传入的 Direct2D 内容,该系统可与实际打印机配合提供实际打印输出。 所有特定于打印的详细信息都隐藏在 Direct2D 应用中,这意味着 Direct2D 应用可以在不知道他们绘制到哪些设备或如何将绘图转换为打印的情况下打印。

若要使用 Direct2D 打印,您需要为拟打印的每个页面准备一个 Direct2D 命令列表,然后将该命令列表传递给 Direct2D 打印控件。 若要准备 Direct2D 命令列表,只需创建命令列表并将其设置为当前设备上下文的绘图目标,然后绘制到该设备上下文,就如同要绘制到位图目标进行显示一样。 有关设备和目标的详细信息,请参阅设备和设备上下文

该图演示了应用、设备上下文、位图目标、命令列表目标和打印控件之间的交互。

注意

Windows 打印子系统和打印机组件灰显,因为它们完全隐藏在 Direct2D 应用中。

显示命令列表和打印如何与应用和 direct2d 交互的关系图。

示例

打印 Direct2D 内容的完整过程包括以下步骤。

  1. 创建打印控件以启动打印作业。
  2. 通过传入命令列表将页面添加到打印控件。
  3. 对文档其余部分的每一页重复步骤 2
  4. 关闭打印控件以完成打印作业。

下面是一个代码示例,演示了该过程。

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();

ID2D1CommandList

ID2D1PrintControl

提高 Direct2D 应用程序和打印的性能