Share via


Visão Geral de Impressão

Com o Microsoft .NET Framework os desenvolvedores de aplicativos usando Windows Presentation Foundation (WPF) têm um novo e rico conjunto de APIs de impressão e de gerenciamento do sistema de impressão. Com o Windows Vista, alguns desses aprimoramentos do sistema de impressão também estão disponíveis para os desenvolvedores criarem aplicativos Windows Forms e para desenvolvedores usando código não gerenciado. O núcleo dessa nova funcionalidade é o novo formato de arquivo XML Paper Specification (XPS) e o caminho de impressão para XPS.

Este tópico contém as seguintes seções.

  • Sobre XPS

  • Caminho de Impressão XPS

  • Caminho de impressão GDI

  • Modelo de driver XPSDrv

  • Tópicos relacionados

Sobre XPS

O XPS é um formato de documento eletrônico, um formato de arquivo de spool e uma linguagem de descrição de página. Ele é um formato de documento em aberto que usa XML, Open Packaging Conventions (OPC)e outros padrões do setor para criar documentos de várias plataformas. XPS simplifica o processo pelo qual documentos digital são criados, compartilhados, impresso, visualizados e arquivados. Para obter informações adicionais sobre como XPS, consulte o Site de XPS.

Várias técnicas para a impressão de conteúdo baseado no XPS usando o WPF são demonstradas no exemplo Impressão um documento XPS e em Como: Programmatically Print XPS Files. Talvez você ache útil para fazer referência a essas Exemplos durante a análise do conteúdo contido neste tópico. (Os desenvolvedores de código não gerenciado devem consulte a Ajuda para o Conversor do Microsoft XPS documento impressora escape. Windows Forms os desenvolvedores devem usar o API no System.Drawing.Printing espaço para nome que não oferece suporte completo XPS caminho de impressão, mas oferece suporte um híbrido GDI para XPS imprime caminho. Consulte Arquitetura de Caminho de Impressão abaixo.)

Caminho de Impressão XPS

O caminho de impressão XML Paper Specification (XPS) é um novo recurso do Windows que redefine como a impressão é tratada em aplicativos Windows. Como o XPS pode substituir uma linguagem de apresentação de documentos (como a RTF), um formato de spooler de impressão (como o WMF) e uma linguagem de descrição de página (como PCL ou PostScript); o novo caminho de impressão mantém o formato XPS da publicação do aplicativo até o processamento final no dispositivo ou driver de impressão.

O caminho de impressão XPS é construído sobre o modelo XPS de driver de impressão (XPSDrv), que oferece vários benefícios para os desenvolvedores, como impressão "what you see is what you get" (WYSIWYG), suporte de cores aprimorado e um desempenho de impressão significativamente melhor. (Para obter mais informações sobre XPSDrv, consulte o Windows Driver Development Kit.)

A operação do spooler de impressão para documentos XPS é essencialmente o mesmo das versões anteriores do Windows. No entanto, ele foi aprimorado para suportar o caminho de impressão XPS além do caminho de impressão GDI existente. O novo caminho de impressão nativamente consome um arquivo de spool XPS. Enquanto drivers de impressora em modo de usuário desenvolvidos para versões anteriores do Windows continuarão a funcionar, um driver de impressora XPS (XPSDrv) é necessário para usar o caminho de impressão XPS.

Os benefícios do caminho de impressão XPS são significativos e incluem:

  • suporte a impressão WYSIWYG

  • Suporte nativo de perfis de cor avançados, que incluem 32 bits por canal (bpc), CMYK, cores nomeadas, n-inks e suporte nativo a transparência e gradientes.

  • Desempenho aprimorado de impressão para aplicativos baseados tanto em .NET Framework quanto em Win32.

  • Formato padrão da indústria XPS.

Para cenários de impressão básicos, uma API simples e intuitiva está disponível com um único ponto de entrada para interface com o usuário, configuração e envio do trabalho. Para cenários avançados, um suporte adicional é adicionado para interface do usuário (UI) personalização (ou nenhuma UI em todos os), impressão assíncrono ou assíncrono e recursos de impressão lote. As duas opções fornecem suporte de impressão no modo de confiança total ou parcial.

O XPS foi desenvolvido com a extensibilidade em mente. Usando o framework de extensibilidade, recursos e capacidades podem ser adicionadas ao XPS de maneira modular. Recursos de extensibilidade incluem:

  • Esquema de impressão. O esquema público é atualizado regularmente e habilita a extensão rápida dos recursos do dispositivo. (Consulte PrintTicket e PrintCapabilities abaixo).

  • Pipeline extensível de filtragem. O pipeline de filtragem do driver de impressora XPS (XPSDrv) foi projetado para permitir a impressão direta e escalável de documentos XPS. (Pesquisa "XPSDrv" noWindows Driver Development Kit.)

Arquitetura de Caminho de Impressão

Enquanto tanto aplicativos Win32 quanto .NET Framework suportam XPS, aplicativos Win32 e Windows Forms usam uma conversão GDI para XPS para criar conteúdo formatado XPS para o driver de impressão XPS (XPSDrv). Esses aplicativos não necessitam usar o caminho de impressão XPS e podem continuar usando impressão baseada em Metarquivo Avançado (EMF). No entanto, a maioria dos recursos e aprimoramentos XPS são apenas disponíveis para aplicativos que tenham como alvo o caminho de impressão XPS.

Para ativar o uso de impressoras com base em XPSDrv por Win32 e Windows Forms aplicativos, o XPS driver de impressora (XPSDrv) oferece suporte à conversão de GDI para XPS formato. O modelo XPSDrv também oferece um conversor para XPS para GDI formato para que Win32 aplicativos podem imprimir XPS Documentos. For WPF conversão de aplicativos XPS para GDI formato é concluído automaticamente com o Write e WriteAsync métodos para o XpsDocumentWriter classe sempre que a fila da operação de gravar de impressão de destino não tem um driver XPSDrv. (Windows Forms não é possível imprimir a aplicativos XPS Documentos.)

A ilustração a seguir ilustra o subsistema de impressão e define as partes fornecidas pela Microsoft e as partes definidas por fornecedores de software e hardware.

O sistema de impressão XPS

Impressão XPS básica

O WPF define tanto uma API básica quanto uma avançada. Para os aplicativos que não exigem personalização de impressão extensa ou acesso ao conjunto completo de recursos do XPS , um suporte básico de impressão está disponível. O suporte básico de impressão é exposto através de um controle de impressão, do tipo caixa de diálogo, que requer configuração mínima e apresenta uma UI familiar. Vários recursos XPS estão disponíveis usando este modelo de impressão simplificado.

PrintDialog

O controle System.Windows.Controls.PrintDialog fornece um único ponto de entrada para UI, configuração e submissão de trabalhos XPS. Para obter informações sobre como criar uma instância e usar o controle, consulte Como: Chamar um diálogo de impressão.

Impressão XPS Avançada

Para acessar o conjunto completo de recursos XPS, a API de impressão avançada deve ser usada. Várias API relevantes são descritas em detalhes mais abaixo. Para obter uma lista completa das APIs de caminhos de impressão XPS, consulte as referências aos espa?os de nomes System.Windows.Xps e System.Printing.

PrintTicket e PrintCapabilities

As classes PrintTicket e PrintCapabilities são a base dos recursos XPS avançados. Ambos sistema autônomo tipos de objetos são XML formatado estruturas de recursos orientados a impressão, sistema autônomo o agrupamento, impressão dos dois lados, grampeamento, etc.. Essas estruturas são definidas pelo Esquema de impressão. Um PrintTicket instrui uma impressora sobre como processar um trabalho de impressão. A classe PrintCapabilities define as funcionalidades de uma impressora. Através da consulta às funcionalidades de uma impressora, um PrintTicket pode ser criado de modo a tirar vantagem de todos os recursos suportados por uma impressora. Da mesma forma, recursos para os quais não há suporte podem ser evitados.

O exemplo a seguir demonstra como consultar as PrintCapabilities de uma impressora e criar um PrintTicket usando código.

// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
///   Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
///   A PrintTicket for the current local default printer.</returns>
private PrintTicket GetPrintTicketFromPrinter()
{
    PrintQueue printQueue = null;

    LocalPrintServer localPrintServer = new LocalPrintServer();

    // Retrieving collection of local printer on user machine
    PrintQueueCollection localPrinterCollection =
        localPrintServer.GetPrintQueues();

    System.Collections.IEnumerator localPrinterEnumerator =
        localPrinterCollection.GetEnumerator();

    if (localPrinterEnumerator.MoveNext())
    {
        // Get PrintQueue from first available printer
        printQueue = (PrintQueue)localPrinterEnumerator.Current;
    }
    else
    {
        // No printer exist, return null PrintTicket
        return null;
    }

    // Get default PrintTicket from printer
    PrintTicket printTicket = printQueue.DefaultPrintTicket;

    PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();

    // Modify PrintTicket
    if (printCapabilites.CollationCapability.Contains(Collation.Collated))
    {
        printTicket.Collation = Collation.Collated;
    }

    if ( printCapabilites.DuplexingCapability.Contains(
            Duplexing.TwoSidedLongEdge) )
    {
        printTicket.Duplexing = Duplexing.TwoSidedLongEdge;
    }

    if (printCapabilites.StaplingCapability.Contains(Stapling.StapleDualLeft))
    {
        printTicket.Stapling = Stapling.StapleDualLeft;
    }

    return printTicket;
}// end:GetPrintTicketFromPrinter()

For the complete example, see Criando um exemplo de documento XPS.

PrintServer e PrintQueue

A classe PrintServer representa um servidor de impressão de rede e a classe PrintQueue representa uma impressora e a fila de trabalhos de saída associada a ela. Juntas, essas APIs permitem o gerenciamento avançado de um servidor de trabalhos de impressão. Um PrintServer, ou uma de suas classes derivadas, é usado para gerenciar uma PrintQueue. O método AddJob é usado para inserir um novo trabalho de impressão na fila.

O exemplo a seguir demonstra como criar um LocalPrintServer e acessar sua PrintQueue padrão usando código.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()

For the complete example, see Impressão um documento XPS.

XpsDocumentWriter

Um XpsDocumentWriter, com seus diversos métodos Write e WriteAsync é usado para escrever documentos XPS em uma PrintQueue. Por exemplo, o método Write(FixedPage, PrintTicket) é usado para produzir um documento XPS e um PrintTicket de forma síncrona. O método WriteAsync(FixedDocument, PrintTicket) é usado para produzir um documento XPS e um PrintTicket de forma assíncrona.

O exemplo a seguir demonstra como criar um XpsDocumentWriter usando código.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()

For the complete example, see Impressão um documento XPS.

Os métodos AddJob também fornecem maneiras para imprimir. Consulte Como: Programmatically Print XPS Files. Para obter detalhes.

Caminho de impressão GDI

Enquanto aplicativos WPF oferecem suporte nativo ao caminho de impressão XPS, aplicativos Win32 e Windows Forms também podem aproveitar alguns recursos do XPS. O driver de impressora XPS (XPSDrv) pode converter saída baseada em GDI para o formato XPS. Para cenários avançados, personalizados de conversão de conteúdo é suportado usando o Conversor do Microsoft XPS documento impressora escape. Da mesma forma, aplicativos WPF podem também produzir saída para o caminho de impressão GDI chamando um dos métodos Write ou WriteAsync da classe XpsDocumentWriter e designando uma impressora não XpsDrv como a fila de impressão de destino.

Para aplicativos que não requerem funcionalidade ou suporte XPS, o caminho de impressão GDI atual permanece inalterado.

Modelo de driver XPSDrv

O caminho de impressão XPS aumenta a eficiência do spooler usando XPS como o formato nativo de spool de impressão ao imprimir em uma impressora ou driver com suporte a XPS. O processo simplificado de enfileiramento elimina a necessidade de gerar um arquivo de spool intermediário, como um arquivo de dados EMF, antes do documento ser colocado no spool. Por meio de um arquivo de spool menor, o caminho de impressão XPS pode reduzir o tráfego de rede e melhorar o desempenho de impressão.

EMF é um formato fechado que representa a saída de um aplicativo como uma série de chamadas de serviços de renderização GDI. Ao contrário do EMF, o formato de spool XPS representa o documento real sem exigir mais interpretação quando enviado para um driver de impressora XPS (XPSDrv). Os drivers podem operar diretamente nos dados no formato. Esse recurso elimina as conversões de dados e espaço de cores necessárias quando você usa arquivos EMF e drivers de impressão com base em GDI.

O tamanho dos arquivos de spool são geralmente reduzidos quando você usa documentos XPS que tem como destino um driver de impressora XPS (XPSDrv) em comparação com seus equivalentes EMF; no entanto, há exceções:

  • Um gráfico vetorial que seja muito complexo, multicamadas ou escrito de forma ineficiente pode ser maior do que uma versão bitmap do mesmo elemento gráfico.

  • Para fins de exibição de tela, arquivos XPS incorporam fontes de dispositivo, bem como fontes computer-based; enquanto arquivos de spool GDI não incorporam fontes de dispositivo. Mas os dois tipos de fontes são subdivididas (veja abaixo) e drivers de impressora podem remover as fontes de dispositivo antes de transmiti o arquivo para a impressora.

A redução de tamanho do spool é executada através de vários mecanismos:

  • Subdivisão de Fontes. Somente caracteres usados dentro do documento real são armazenadas no arquivo XPS.

  • Suporte Gráfico Avançado. O suporte nativo a primitivas de transparência e gradiente evita rasterização de conteúdo no documento XPS.

  • Identificação de recursos comuns. Recursos que são usados várias vezes (tais como uma imagem que representa um logotipo corporativo) são tratados como recursos compartilhados e são carregados apenas uma vez.

  • Compactação ZIP. Todos os documentos XPS usam compactação ZIP.

Consulte também

Tarefas

Impressão um documento XPS

Conceitos

Documentos em Windows Presentation Foundation

Serialização e Armazenamento de Documento

Referência

PrintDialog

XpsDocumentWriter

XpsDocument

PrintTicket

PrintCapabilities

PrintServer

PrintQueue

Conversor do Microsoft XPS documento impressora escape

Outros recursos

Imprimindo Tópicos de How-to

Esquema de Impressão

XPS

Impressão e spooler de impressão