Печать и списки команд
Элемент управления печати Direct2D — это новый компонент модуля Direct2D в Windows 8. Этот компонент позволяет приложениям Direct2D повторно использовать вызовы рисования Direct2D (с точки зрения изменений состояния и примитивов отображения) для доставки результатов печати, аналогичных отображаемым на экране.
Интерфейс ID2D1PrintControl представляет задание виртуальной печати: вы можете создать элемент управления печати Direct2D для запуска нового задания печати, передать содержимое Direct2D для каждой страницы, которую вы хотите распечатать, а затем закрыть элемент управления печати, чтобы завершить задание печати.
Примечание.
Элемент управления печатью сопоставляется с одним заданием печати и не может повторно использовать его.
Элемент управления печати Direct2D преобразует и оптимизирует переданное содержимое Direct2D для подсистемы печати, которая работает с реальными принтерами для доставки фактической печати. Все сведения, относящиеся к печати, скрыты от приложений Direct2D, что означает, что приложения Direct2D могут печатать, не зная, на какие устройства они рисуются, или как рисунки переводятся на печать.
Чтобы распечатать с помощью Direct2D, необходимо подготовить один список команд Direct2D для каждой страницы, которую нужно распечатать, а затем передать этот список команд в элемент управления печати Direct2D. Чтобы подготовить этот список команд Direct2D, просто создайте и задайте список команд в качестве целевого объекта рисования текущего контекста устройства, а затем нарисуйте этот контекст устройства точно так же, как если бы вы рисовали в целевой объект растрового изображения для отображения. Дополнительные сведения о устройствах и целевых объектах см. в контекстах устройств и устройств.
На схеме показано взаимодействие между приложением, контекстом устройства, растровым изображением, целевым объектом списка команд и элементом управления печатью.
Примечание.
Компоненты подсистемы и принтера Windows Print находятся в сером цвете, так как они полностью скрыты от приложений 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();