Guia de início rápido: imprimindo a partir do seu aplicativo
Idioma: HTML | XAML

Guia de início rápido: imprimindo a partir do seu aplicativo (XAML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Este Guia de início rápido mostra a maneira mais simples de adicionar a funcionalidade de impressão ao seu aplicativo da Windows Store em C++, C# ou Visual Basic.

Assista a este vídeo rápido para ter uma visão geral do processo.

Em linhas gerais, para imprimir a partir do seu aplicativo da Windows Store usando C++, C# ou Visual Basic, esse aplicativo deve:

  • Registrar-se para o contrato do botão Imprimir em cada tela do aplicativo a partir da qual você quer permitir que os usuários imprimam.

    Registrar-se para o contrato do botão Imprimir significa obter um objeto PrintManager, criar um objeto PrintTask e manipular os eventos de impressão.

  • Fornecer conteúdo formatado para impressão.

    A experiência de impressão padrão apresentada neste Guia de início rápido é o Windows imprimir a exibição em tela do seu aplicativo. Para saber mais sobre como formatar o conteúdo do seu aplicativo para impressão, veja a seção Resumo e próximas etapas.

Pré-requisitos

  • Você deve estar familiarizado com a linguagem C# ou Visual Basic, XAML, eventos do Windows e manipulação de eventos.
  • É necessário ter o Microsoft Visual Studio instalado.
  • É necessário ter uma impressora instalada.
  • É necessário ter um aplicativo ao qual você quer adicionar impressão. Se você não tem o seu próprio aplicativo, pode baixar e usar o aplicativo de amostra PrintSample.

Instruções

1. Abrir o código-fonte do aplicativo para edição

Este procedimento descreve como abrir o aplicativo de amostra PrintSample. Se você estiver usando o seu próprio aplicativo, abra-o no Visual Studio e pule para a etapa seguinte.

Importante  Os exemplos de código apresentados neste guia de início rápido fazem referência ao aplicativo de amostra PrintSample. Talvez seja necessário adicionar mais código proveniente do aplicativo de amostra para usar esses exemplos no seu próprio aplicativo.
 
  1. Abra a amostra de Impressão para aplicativos da Windows Store e baixe o exemplo para C# no seu computador.
  2. No Visual Studio, clique em File > Open Project e vá para a pasta que contém o arquivo de solução do aplicativo de amostra que você baixou na etapa anterior.
  3. Selecione o arquivo de solução PrintSample e clique em Abrir.

2. Compilar e testar o aplicativo

  1. Clique em Compilar > Compilar Solução para compilar o aplicativo no qual você está trabalhando. Verifique se não há mensagens de erro no painel Saída localizado na parte inferior da tela.
  2. Clique em Depurar > Iniciar sem Depuração.
  3. Verifique se, após alguns segundos, a tela exibe o aplicativo PrintSample.
  4. Se o aplicativo for executado sem erros, retorne ao Visual Studio e clique em Depurar > Parar Depuração.

3. Registrar-se para impressão do Windows

Neste ponto, você deve ter um aplicativo que apresenta uma tela com conteúdo.

A primeira etapa para adicionar impressão ao seu aplicativo é registrar-se para o contrato do botão Imprimir. Seu aplicativo deve fazer isso em cada tela na qual você quer que o seu cliente seja capaz de imprimir.

Dica  Se precisar suportar a impressão de mais de uma página em seu aplicativo, você pode colocar esse código de impressão em uma classe básica comum e fazer as páginas do aplicativo derivarem dela. Para ver um exemplo de como fazer isso, confira a classe BasePrintPage no aplicativo de amostra PrintSample.
 
Observação  Apenas a tela exibida para o usuário pode ser registrada para impressão. Se uma tela do seu aplicativo estiver registrada para impressão, será necessário que ela cancele esse registro ao ser encerrada. Se ela for substituída por outra tela, esta deverá se registrar para um novo contrato do botão Imprimir quando for aberta.
 

Primeiro, declare PrintManager e PrintDocument. O tipo PrintManager está no namespace Windows.Graphics.Printing, junto com tipos para dar suporte a outras funcionalidades de impressão do Windows. O tipo PrintDocument está no namespace Windows.UI.Xaml.Printing, junto com outros tipos que dão suporte para a preparação de conteúdo XAML para impressão. Você pode facilitar a elaboração do seu código de impressão adicionando as seguintes instruções using ou Imports à sua página.


using Windows.Graphics.Printing;
using Windows.UI.Xaml.Printing;


Crie o método de registro para inicializar as propriedades que o seu aplicativo precisará usar para impressão.

No aplicativo de amostra PrintSample, esse método está na classe base que é usada pelas diferentes exibições do aplicativo.


protected virtual void RegisterForPrinting()
{
    // Create the PrintDocument.
    printDocument = new PrintDocument();

    // Save the DocumentSource.
    printDocumentSource = printDocument.DocumentSource;

    // Add an event handler which creates preview pages.
    printDocument.Paginate += CreatePrintPreviewPages;

    // Add an event handler which provides a specified preview page.
    printDocument.GetPreviewPage += GetPrintPreviewPage;

    // Add an event handler which provides all final print pages.
    printDocument.AddPages += AddPrintPages;

    // Create a PrintManager and add a handler for printing initialization.
    PrintManager printMan = PrintManager.GetForCurrentView();
    printMan.PrintTaskRequested += PrintTaskRequested;

    // Initialize print content for this scenario
    PreparePrintContent();
}


Quando o usuário vai até a página, registre para impressão criando instância de PrintManager e PrintDocument, bem como registrando manipuladores para os eventos de impressão.


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Get a pointer to our main page
    rootPage = e.Parameter as MainPage;

    // init printing 
    RegisterForPrinting();
}


Quando o usuário deixar a página, desconecte os manipuladores de evento de impressão. Se você tiver um aplicativo de várias páginas e não desconectar a impressão, uma exceção será lançada quando o usuário sair da página e retornar a ela.


protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    UnregisterForPrinting();
}


4. Formatar o conteúdo do seu aplicativo para impressão

A impressão do Windows gera eventos quando o usuário quer imprimir e quando o aplicativo deve fornecer o conteúdo formatado a ser impresso.

Quando um usuário seleciona uma impressora no botão Dispositivos, o evento PrintTaskRequested é gerado. O manipulador de eventos PrintTaskRequested apresentado nesta etapa cria um PrintTask chamando o método PrintTaskRequest.CreatePrintTask e transmite o título da página de impressão e o nome de um representante PrintTaskSourceRequestedHandler. Observe que, neste exemplo, PrintTaskSourceRequestedHandler está definido de maneira embutida. PrintTaskSourceRequestedHandler fornece o conteúdo formatado para impressão e está descrito mais adiante.

Neste exemplo, um manipulador de conclusão também é definido para capturar erros. É uma boa ideia lidar com eventos de conclusão, pois o seu aplicativo pode informar o usuário se um erro tiver ocorrido e fornecer as possíveis soluções. Da mesma maneira, seu aplicativo pode usar o evento de conclusão para indicar etapas subsequentes que o usuário deve realizar após a conclusão bem-sucedida do trabalho de impressão.


protected virtual void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
    PrintTask printTask = null;
    printTask = e.Request.CreatePrintTask("C# Printing SDK Sample", sourceRequested =>
        {
            // Print Task event handler is invoked when the print job is completed.
            printTask.Completed += async (s, args) =>
            {
                // Notify the user when the print operation fails.
                if (args.Completion == PrintTaskCompletion.Failed)
                {
                    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        rootPage.NotifyUser("Failed to print.", NotifyType.ErrorMessage);
                    });
                }
            };

            sourceRequested.SetSource(printDocumentSource);
        });
} 


Após a criação da tarefa de impressão, o PrintManager solicita uma coleção de páginas de impressão para apresentar na interface do usuário para visualização de impressão. Para isso, ele gera o evento Paginate. No manipulador de eventos Paginate, você cria as páginas que serão apresentadas na interface do usuário para visualização de impressão e que serão enviadas para a impressora. O código usado para preparar o conteúdo do seu aplicativo para impressão é específico para o aplicativo e o conteúdo que você imprimir.

Este exemplo de manipulador de eventos Paginate foi extraído do aplicativo de amostra PrintSample. Consulte o código-fonte do aplicativo de amostra para ver como ele formata seu conteúdo para impressão.


protected virtual void CreatePrintPreviewPages(object sender, PaginateEventArgs e)
{
    // Clear the cache of preview pages 
    printPreviewPages.Clear();
    
    // Clear the printing root of preview pages
    PrintingRoot.Children.Clear();

    // This variable keeps track of the last RichTextBlockOverflow element that was added to a page which will be printed
    RichTextBlockOverflow lastRTBOOnPage;

    // Get the PrintTaskOptions
    PrintTaskOptions printingOptions = ((PrintTaskOptions)e.PrintTaskOptions);

    // Get the page description to deterimine how big the page is
    PrintPageDescription pageDescription = printingOptions.GetPageDescription(0);

    // We know there is at least one page to be printed. passing null as the first parameter to
    // AddOnePrintPreviewPage tells the function to add the first page.
    lastRTBOOnPage = AddOnePrintPreviewPage(null, pageDescription);

    // We know there are more pages to be added as long as the last RichTextBoxOverflow added to a print preview
    // page has extra content
    while (lastRTBOOnPage.HasOverflowContent && lastRTBOOnPage.Visibility == Windows.UI.Xaml.Visibility.Visible)
    {
        lastRTBOOnPage = AddOnePrintPreviewPage(lastRTBOOnPage, pageDescription);
    }

    if (pagesCreated != null)
    {
        pagesCreated.Invoke(printPreviewPages, null);
    }

    PrintDocument printDoc = (PrintDocument)sender;

    // Report the number of preview pages created
    printDoc.SetPreviewPageCount(printPreviewPages.Count, PreviewPageCountType.Intermediate);
}


O exemplo anterior mostra um cenário de impressão muito simples. Apenas uma página é criada, e o conteúdo é dimensionado para preencher toda a área disponível. Outros tópicos desta seção mostram exemplos de cenários de impressão mais complexos.

No manipulador de eventos AddPages, você adiciona página da coleção de páginas para o objeto PrintDocument que será enviado à impressora. Se um usuário especifica página específicas ou um intervalo de páginas para impressão, você usa essas informações para adicionar somente as páginas que serão enviadas à impressora.

Este exemplo de manipulador de eventos AddPages foi extraído do aplicativo de amostra PrintSample.


protected virtual void AddPrintPages(object sender, AddPagesEventArgs e)
{
    // Loop over all of the preview pages and add each one to  add each page to be printied
    for (int i = 0; i < printPreviewPages.Count; i++)
    {
        // We should have all pages ready at this point...
        printDocument.AddPage(printPreviewPages[i]);
    }

    PrintDocument printDoc = (PrintDocument)sender;
    
    // Indicate that all of the print pages have been provided
    printDoc.AddPagesComplete();
}


Resumo e próximas etapas

Neste Guia de início rápido, você adicionou a impressão do Windows ao seu aplicativo, sem modificar a maneira como os usuários interagem com o aplicativo.

No próximo tutorial, Como imprimir usando um botão de impressão no aplicativo, você chamará a funcionalidade de impressão de um aplicativo da Windows Store usando C++, C# ou Visual Basic com um botão de impressão no aplicativo. A partir de lá, você pode explorar algumas funções de impressão mais avançadas.

Seu aplicativo ainda pode oferecer ao usuário outras opções de impressão, conforme demonstrado nos tutoriais Como mudar opções padrão na interface do usuário para visualização de impressão e Como adicionar opções personalizadas à interface do usuário para visualização de impressão.

E, para ver mais cenários de impressão que estão disponíveis em aplicativos da Windows Store, confira o aplicativo de amostra de impressão para aplicativos da Windows Store.

Tópicos relacionados

Mapa de aplicativos do Tempo de Execução do Windows em C# ou Visual Basic

 

 

Mostrar:
© 2017 Microsoft