Listas de comandos e impressão

O controle de impressão Direct2D é um novo componente do módulo Direct2D no Windows 8. Esse componente permite que os aplicativos Direct2D reutilizem suas chamadas de desenho Direct2D (em termos de alterações de estado e primitivas de rending) para fornecer resultados de impressão semelhantes aos que você vê na tela.

A interface ID2D1PrintControl representa um trabalho de impressão virtual: você pode criar um controle de impressão Direct2D para iniciar um novo trabalho de impressão, passar o conteúdo Direct2D para cada página que deseja imprimir e, em seguida, fechar o controle de impressão para concluir um trabalho de impressão.

Observação

Um controle de impressão é mapeado para um e exatamente um trabalho de impressão e você não pode reutilizá-lo.

O controle de impressão Direct2D converte e otimiza o conteúdo Direct2D passado para o subsistema de impressão, que funciona com as impressoras reais para fornecer a impressão real. Todos os detalhes específicos de impressão são ocultados dos aplicativos Direct2D, o que significa que os aplicativos Direct2D podem imprimir sem saber em quais dispositivos estão desenhando ou como os desenhos são convertidos para impressão.

Para imprimir com Direct2D, você precisa preparar uma lista de comandos Direct2D para cada página que deseja imprimir e, em seguida, passar essa lista de comandos para o controle de impressão Direct2D. Para preparar essa lista de comandos Direct2D, basta criar e definir uma lista de comandos como o destino de desenho do contexto do dispositivo atual e, em seguida, desenhar para esse contexto de dispositivo, exatamente como se estivesse desenhando para um destino de bitmap para exibição. Consulte Dispositivos e contextos de dispositivo para obter mais informações sobre dispositivos e destinos.

O diagrama aqui ilustra a interação entre o aplicativo, o contexto do dispositivo, o destino do bitmap, o destino da lista de comandos e o controle de impressão.

Observação

Os componentes do Subsistema de Impressão do Windows e de Impressora estão em cinza porque estão completamente ocultos dos aplicativos Direct2D.

um diagrama que mostra como commandlist e a impressão interagem com um aplicativo e o direct2d.

Exemplo

O processo completo de impressão de conteúdo Direct2D inclui as etapas a seguir.

  1. Crie um controle de impressão para iniciar um trabalho de impressão.
  2. Adicione uma página ao controle de impressão passando uma lista de comandos.
  3. Repita a etapa 2 para cada página no restante do documento
  4. Feche o controle de impressão para concluir o trabalho de impressão.

Aqui está um exemplo de código mostrando o processo.

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

Como melhorar o desempenho de aplicativos e de impressão Direct2D