Idioma: HTML | XAML

Inicio rápido: imprimir desde tu aplicación (XAML)

Applies to Windows only

Esta guía de inicio rápido explica la forma más sencilla para agregar funcionalidad de impresión a tu aplicación de la Tienda Windows con C++, C# o Visual Basic.

Mira este breve vídeo para ver una descripción general del proceso.

En términos generales, para imprimir desde tu aplicación de la Tienda Windows con C++, C# o Visual Basic, tu aplicación debe:

  • Registrarse en el contrato de Imprimir en cada una de las presentaciones de la aplicación desde las cuales quieres que los usuarios puedan imprimir.

    Registrarse en el contrato de Imprimir significa obtener un objeto PrintManager, creando un objeto PrintTask y manipulando los eventos de impresión.

  • Proporcionar contenido con formato para imprimir.

    La experiencia de impresión predeterminada que se muestra en este inicio rápido consiste en que Windows imprime la presentación en pantalla de tu aplicación. Para obtener más información sobre cómo aplicar formato al contenido de tu aplicación para impresión, consulta Resumen y pasos siguientes.

Requisitos previos

  • Debes estar familiarizado con C# o Visual Basic, XAML, los eventos de Windows y el control de eventos.
  • Debes tener instalado Microsoft Visual Studio.
  • Debes tener una impresora instalada.
  • Debes tener una aplicación a la que desees agregar funciones de impresión. Si no tienes tu propia aplicación, puedes descargar la aplicación de muestra PrintSample para usarla.

Instrucciones

1. Abrir el código fuente de la aplicación para su edición

Este procedimiento describe cómo abrir la aplicación de muestra PrintSample. Si vas a usar tu propia aplicación, ábrela en Visual Studio y continúa con el paso siguiente.

Importante  Los ejemplos de código que se muestran en este inicio rápido hacen referencia a la aplicación de muestra PrintSample. Es posible que debas agregar más código de la aplicación de muestra para usar estos ejemplos en tu propia aplicación.
  1. Abre la muestra de impresión de aplicación de la Tienda Windows y descarga el ejemplo de C# en tu equipo.
  2. En Visual Studio, haz clic en File > Open Project y ve a la carpeta que contiene el archivo de solución de la aplicación de muestra que descargaste en el paso anterior.
  3. Selecciona el archivo de solución PrintSample y haz clic en Abrir.

2. Compilar y probar la aplicación

  1. Haz clic en Compilar > Compilar solución para compilar la aplicación en la que estás trabajando. Asegúrate de que no haya mensajes de error en el panel Salida en la parte inferior de la pantalla.
  2. Haz clic en Depurar > Iniciar sin depurar.
  3. Comprueba que, tras unos segundos, se muestra en pantalla la aplicación PrintSample.
  4. Si la aplicación se ejecuta sin errores, vuelve a Visual Studio y haz clic en Depurar > Detener depuración.

3. Registro para impresión de Windows

En este punto, deberías tener una aplicación que muestre algún contenido en la pantalla.

El primer paso para agregar impresión a tu aplicación es registrarte en el contrato de Imprimir. Tu aplicación debe realizar esta acción en cada pantalla desde la que desees que el cliente pueda imprimir.

Sugerencia  Si necesitas soporte para imprimir desde más de una página en tu aplicación, puedes colocar este código de impresión en una clase base común y hacer que las páginas de la aplicación se deriven de él. Para ver un ejemplo de cómo hacerlo, consulta la clase BasePrintPage en la aplicación de muestra PrintSample.
Nota  Solo puedes registrar para impresión la pantalla que se muestra al usuario. Si una pantalla de tu aplicación se registró para impresión, debe anular su registro cuando salga. Si se la reemplaza con otra pantalla, la siguiente pantalla debe registrarse para un nuevo contrato de Imprimir al abrirse.

Primero, declara PrintManager y PrintDocument. El tipo PrintManager se encuentra en el espacio de nombres Windows.Graphics.Printing junto con tipos para admitir otras funciones de impresión de Windows. El tipo PrintDocument se encuentra en el espacio de nombres Windows.UI.Xaml.Printing junto con otros tipos que admiten la preparación de contenido XAML para impresión. Puedes simplificar la escritura de código de impresión agregando las siguientes instrucciones using o Imports a tu página.


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


Crea el método de registro para inicializar las propiedades que tu aplicación necesitará para imprimir.

En la aplicación de muestra PrintSample, este método se encuentra en la clase base que usan distintas visualizaciones de la aplicación.


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


Cuando el usuario vaya a la página, regístrala para impresión creando instancias de PrintManager y PrintDocument, y registrando controladores para sus eventos de impresión.


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

    // init printing 
    RegisterForPrinting();
}


Cuando el usuario abandone la página, desconecta los controladores de eventos de impresión. Si tienes una aplicación de múltiples páginas y no desconectas la impresión, se generará una excepción cuando el usuario abandone la página y regrese a ella.


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


4. Aplicar formato al contenido de tu aplicación para impresión

La impresión de Windows genera eventos cuando el usuario desea imprimir y cuando quiere que la aplicación proporcione el contenido con formato para impresión.

Cuando un usuario selecciona una impresora en el acceso a Dispositivos, se genera el evento PrintTaskRequested. El controlador de eventos PrintTaskRequested que se muestra en este paso crea una PrintTask llamando al método PrintTaskRequest.CreatePrintTask y pasa el título de la página de impresión y el nombre de un delegado PrintTaskSourceRequestedHandler. Ten en cuenta que en este ejemplo, el PrintTaskSourceRequestedHandler se define en línea. El PrintTaskSourceRequestedHandler proporciona el contenido con formato para impresión y se describe más adelante.

En este ejemplo, se define también un controlador de finalización para capturar errores. Es recomendable controlar los eventos de finalización, ya que luego tu aplicación puede informar al usuario si ocurrió un error y proporcionar posibles soluciones. De la misma manera, tu aplicación podría usar el evento de finalización para indicar los pasos subsiguientes que el usuario debe seguir después de que el trabajo de impresión sea correcto.


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


Una vez creada la tarea de impresión, el evento PrintManager solicita una colección de páginas de impresión para mostrar en la interfaz de usuario de vista previa de impresión generando el evento Paginate. En el controlador de eventos Paginate, crea las páginas que se muestran en la interfaz de usuario de vista previa de impresión y se envían a la impresora. El código que usas para preparar el contenido de tu aplicación para impresión es específico de la aplicación y del contenido que imprimes.

Este ejemplo de un controlador de eventos Paginate se toma de la aplicación de muestra PrintSample. Consulta el código fuente de la aplicación de muestra para ver cómo se aplica formato al contenido para impresión.


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


El ejemplo anterior muestra un escenario de impresión muy sencillo. Solo se crea una página, y el contenido se escala para que ocupe toda el área disponible. Otros temas de esta sección muestran ejemplos de escenarios de impresión más complejos.

En el controlador de eventos AddPages, agrega páginas de la colección de páginas en el objeto PrintDocument que se va a enviar a la impresora. Si un usuario especifica páginas concretas o un intervalo de páginas para imprimir, usas esa información aquí para agregar solamente las páginas que se enviarán a la impresora.

Este ejemplo de un controlador de eventos AddPages se toma de la aplicación de muestra 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();
}


Resumen y pasos siguientes

En este inicio rápido, agregaste impresión de Windows a tu aplicación, sin modificar el modo en que los usuarios interactúan con tu aplicación.

En el siguiente tutorial, Cómo imprimir con un botón de impresión en la aplicación, invocarás una función de impresión desde una aplicación de la Tienda Windows con C++, C# o Visual Basic con un botón de impresión en la aplicación. Desde allí, puedes explorar algunas funciones de impresión más avanzadas.

Tu aplicación puede dar aún más opciones de impresión al usuario, como se muestra en Cómo cambiar las opciones estándar en la interfaz de usuario de vista previa de impresión y Cómo agregar opciones personalizadas a la interfaz de usuario de vista previa de impresión.

Si también quieres ver otros escenarios de impresión disponibles para aplicaciones de la Tienda Windows, consulta la muestra de impresión de aplicación de la Tienda Windows.

Temas relacionados

Guía básica para crear aplicaciones de Windows en tiempo de ejecución con C# o Visual Basic

 

 

Mostrar:
© 2015 Microsoft