Personalizar la interfaz de usuario de la vista previa de impresión

En este tema se describe cómo personalizar las opciones de impresión y la configuración en la interfaz de usuario de vista previa de impresión. Para obtener más información sobre la impresión, consulta Imprimir desde tu aplicación.

Propina La mayoría de los ejemplos de este tema se basan en el ejemplo de impresión de Plataforma universal de Windows (UWP).

API importantes

Personalizar las opciones de impresión

De forma predeterminada, la interfaz de usuario de vista previa de impresión muestra las opciones de impresión ColorMode, Copies y Orientation. Además de estas opciones, existen varias opciones de impresora comunes que podrás agregar a la interfaz de usuario de vista previa de impresión:

Estas opciones se definen en la clase StandardPrintTaskOptions. Puedes agregar o quitar opciones de la lista que se muestra en la interfaz de usuario de vista previa de impresión. También puedes cambiar el orden en que aparecen las opciones y establecer la configuración predeterminada que se muestra al usuario.

Pero los cambios que realices mediante este método afectan solo a la interfaz de usuario de vista previa de impresión. El usuario siempre puede acceder a todas las opciones que admite la impresora pulsando **Más configuración*- en la interfaz de usuario de vista previa de impresión.

Nota

Aunque la aplicación puede especificar las opciones de impresión que se van a mostrar, solo las compatibles con la impresora seleccionada se muestran en la interfaz de usuario de vista previa de impresión. La interfaz de impresión no mostrará opciones que no sean compatibles con la impresora seleccionada.

Definir las opciones que se van a mostrar

Una vez que se carga la pantalla de la aplicación, se registra para el contrato de Imprimir. El registro incluye la definición del controlador de eventos PrintTaskRequested. El código para personalizar las opciones que se muestran en la interfaz de usuario de vista previa de impresión se agrega al controlador de eventos **PrintTaskRequested*- .

Modifique el controlador de eventos PrintTaskRequested para incluir las instrucciones printTask.options que configuran los valores de impresión que desea mostrar en la interfaz de usuario de vista previa de impresión. Para la pantalla de la aplicación para la que quieres mostrar una lista personalizada de opciones de impresión, invalida el controlador de eventos **PrintTaskRequested*- en la clase auxiliar para incluir código que especifica las opciones que se van a mostrar cuando se imprime la pantalla.

protected override void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
   PrintTask printTask = null;
   printTask = e.Request.CreatePrintTask("C# Printing SDK Sample", sourceRequestedArgs =>
   {
         IList<string> displayedOptions = printTask.Options.DisplayedOptions;

         // Choose the printer options to be shown.
         // The order in which the options are appended determines the order in which they appear in the UI
         displayedOptions.Clear();
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Copies);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Orientation);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.MediaSize);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Collation);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Duplex);

         // Preset the default value of the printer option
         printTask.Options.MediaSize = PrintMediaSize.NorthAmericaLegal;

         // 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 scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     MainPage.Current.NotifyUser("Failed to print.", NotifyType.ErrorMessage);
               });
            }
         };

         sourceRequestedArgs.SetSource(printDocumentSource);
   });
}

Importante

Al llamar a displayedOptions.clear() se quitan todas las opciones de impresión de la interfaz de usuario de vista previa de impresión, incluido el vínculo **Más configuración*- . Asegúrate de anexar las opciones que deseas mostrar en la interfaz de usuario de vista previa de impresión.

Especificar las opciones predeterminadas

También puedes establecer los valores predeterminados de las opciones de la interfaz de usuario de vista previa de impresión. La siguiente línea de código, tomada del ejemplo anterior, establece el valor predeterminado de la opción MediaSize.

         // Preset the default value of the printer option
         printTask.Options.MediaSize = PrintMediaSize.NorthAmericaLegal;

Agregar nuevas opciones de impresión

Aquí se explica cómo crear una nueva opción de impresión, definir una lista de valores que admite la opción y, a continuación, agregar la opción a la vista previa de impresión. Al igual que en la sección anterior, agregue la nueva opción de impresión en el controlador de eventos PrintTaskRequested .

Primero, obtén un objeto PrintTaskOptionDetails. Este objeto se usa para agregar la nueva opción de impresión a la interfaz de usuario de vista previa de impresión. Después, borra la lista de opciones que se muestran en la interfaz de usuario de vista previa de impresión y agrega las opciones que desees que aparezcan cuando el usuario quiera imprimir desde la aplicación. A continuación, crea la nueva opción de impresión e inicializa la lista de valores de opción. Por último, agregue la nueva opción y asigne un controlador para el evento **OptionChanged*- .

protected override void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
   PrintTask printTask = null;
   printTask = e.Request.CreatePrintTask("C# Printing SDK Sample", sourceRequestedArgs =>
   {
         PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);
         IList<string> displayedOptions = printDetailedOptions.DisplayedOptions;

         // Choose the printer options to be shown.
         // The order in which the options are appended determines the order in which they appear in the UI
         displayedOptions.Clear();

         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Copies);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Orientation);
         displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.ColorMode);

         // Create a new list option
         PrintCustomItemListOptionDetails pageFormat = printDetailedOptions.CreateItemListOption("PageContent", "Pictures");
         pageFormat.AddItem("PicturesText", "Pictures and text");
         pageFormat.AddItem("PicturesOnly", "Pictures only");
         pageFormat.AddItem("TextOnly", "Text only");

         // Add the custom option to the option list
         displayedOptions.Add("PageContent");

         printDetailedOptions.OptionChanged += printDetailedOptions_OptionChanged;

         // 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 scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     MainPage.Current.NotifyUser("Failed to print.", NotifyType.ErrorMessage);
               });
            }
         };

         sourceRequestedArgs.SetSource(printDocumentSource);
   });
}

Las opciones aparecen en la interfaz de usuario de vista previa de impresión en el mismo orden en que se anexaron, con la primera opción en la parte superior de la ventana. En este ejemplo, la opción personalizada se anexa al final para que aparezca en la parte inferior de la lista de opciones. No obstante, puedes colocarla en cualquier parte de la lista; no es necesario agregar las opciones de impresión personalizadas al final.

Cuando el usuario cambia la opción seleccionada en la opción personalizada, actualiza la imagen de vista previa de impresión. Llama al método InvalidatePreview para dibujar la imagen en la interfaz de usuario de vista previa de impresión, como se muestra a continuación.

async void printDetailedOptions_OptionChanged(PrintTaskOptionDetails sender, PrintTaskOptionChangedEventArgs args)
{
   // Listen for PageContent changes
   string optionId = args.OptionId as string;
   if (string.IsNullOrEmpty(optionId))
   {
         return;
   }

   if (optionId == "PageContent")
   {
         await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
         {
            printDocument.InvalidatePreview();
         });
   }
}

Vea también