Imprimir desde tu aplicaciónPrint from your app

API importantesImportant APIs

Aprende a imprimir documentos desde aplicaciones universales de Windows.Learn how to print documents from a Universal Windows app. En este tema también se muestra cómo imprimir páginas específicas.This topic also shows how to print specific pages. Para realizar cambios más avanzados en la interfaz de usuario de la vista previa de impresión, consulta Personalizar la interfaz de usuario de vista previa de impresión.For more advanced changes to the print preview UI, see Customize the print preview UI.

Sugerencia

 La mayoría de los ejemplos de este tema se basan en el ejemplo de impresión plataforma universal de Windows (UWP), que forma parte del repositorio de ejemplos de aplicaciones plataforma universal de Windows (UWP) en github. Most of the examples in this topic are based on the Universal Windows Platform (UWP) print sample, which is part of the Universal Windows Platform (UWP) app samples repo on GitHub.

Registro para la impresiónRegister for printing

El primer paso para agregar impresión a tu aplicación es registrarte en el contrato de Imprimir.The first step to add printing to your app is to register for the Print contract. La aplicación debe hacer esto en todas las pantallas desde las que desea que el usuario pueda imprimir.Your app must do this on every screen from which you want your user to be able to print. Solo puedes registrar para impresión la pantalla que se muestra al usuario.Only the screen that is displayed to the user can be registered for printing. Si una pantalla de la aplicación se registró para realizar la impresión, debes anular su registro cuando termine la operación de impresión.If one screen of your app has registered for printing, it must unregister for printing when it exits. Si se reemplaza con otra pantalla, la siguiente pantalla debe registrarse en un nuevo contrato de Imprimir al abrirse.If it is replaced by another screen, the next screen must register for a new Print contract when it opens.

Sugerencia

 Si necesita admitir la impresión desde más de una página de la aplicación, puede colocar el código de impresión en una clase auxiliar común y hacer que las páginas de la aplicación lo reutilicen. If you need to support printing from more than one page in your app, you can put this print code in a common helper class and have your app pages reuse it. Para ver un ejemplo de cómo hacerlo, consulta la clase PrintHelper de la muestra de impresión de UWP.For an example of how to do this, see the PrintHelper class in the UWP print sample.

Primero, debes declarar PrintManager y PrintDocument.First, declare the PrintManager and PrintDocument. El tipo PrintManager se encuentra en el espacio de nombres Windows.Graphics.Printing junto con los tipos que admiten otras funciones de impresión de Windows.The PrintManager type is in the Windows.Graphics.Printing namespace along with types to support other Windows printing functionality. 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 su impresión.The PrintDocument type is in the Windows.UI.Xaml.Printing namespace along with other types that support preparing XAML content for printing. Puedes simplificar la escritura de código de impresión agregando las instrucciones using o Imports a la página.You can make it easier to write your printing code by adding the following using or Imports statements to your page.

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

La clase PrintDocument se usa para controlar gran parte de la interacción entre la aplicación y la clase PrintManager, pero expone varias devoluciones de llamada propias.The PrintDocument class is used to handle much of the interaction between the app and the PrintManager, but it exposes several callbacks of its own. Durante el registro, debes crear instancias de PrintManager y PrintDocument, y se registrar los controladores de los eventos de impresión.During registration, create instances of PrintManager and PrintDocument and register handlers for their printing events.

En la muestra de impresión para UWP, el método RegisterForPrinting es el que realiza el registro.In the UWP print sample, registration is performed by the RegisterForPrinting method.

public virtual void RegisterForPrinting()
{
   printDocument = new PrintDocument();
   printDocumentSource = printDocument.DocumentSource;
   printDocument.Paginate += CreatePrintPreviewPages;
   printDocument.GetPreviewPage += GetPrintPreviewPage;
   printDocument.AddPages += AddPrintPages;

   PrintManager printMan = PrintManager.GetForCurrentView();
   printMan.PrintTaskRequested += PrintTaskRequested;
}

Cuando el usuario va a una página que admite la impresión, inicia el registro dentro del OnNavigatedTo método.When the user goes to a page that supports printing, it initiates the registration within the OnNavigatedTo method.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   // Initialize common helper class and register for printing
   printHelper = new PrintHelper(this);
   printHelper.RegisterForPrinting();

   // Initialize print content for this scenario
   printHelper.PreparePrintContent(new PageToPrint());

   // Tell the user how to print
   MainPage.Current.NotifyUser("Print contract registered with customization, use the Print button to print.", NotifyType.StatusMessage);
}

En el ejemplo, se anula el registro de los controladores de eventos en el UnregisterForPrinting método.In the sample, the event handlers are unregistered in the UnregisterForPrinting method.

public virtual void UnregisterForPrinting()
{
    if (printDocument == null)
    {
        return;
    }

    printDocument.Paginate -= CreatePrintPreviewPages;
    printDocument.GetPreviewPage -= GetPrintPreviewPage;
    printDocument.AddPages -= AddPrintPages;

    PrintManager printMan = PrintManager.GetForCurrentView();
    printMan.PrintTaskRequested -= PrintTaskRequested;
}

Cuando el usuario deja una página que admite la impresión, se anula el registro de los controladores de eventos dentro del OnNavigatedFrom método.When the user leaves a page that supports printing, the event handlers are unregistered within the OnNavigatedFrom method.

Nota

Si tiene una aplicación de varias páginas y no desconecta la impresión, se produce una excepción cuando el usuario abandona la página y vuelve a ella.If you have a multiple-page app and don't disconnect printing, an exception is thrown when the user leaves the page and then returns to it.

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   if (printHelper != null)
   {
         printHelper.UnregisterForPrinting();
   }
}

Crear un botón de impresiónCreate a print button

Agrega un botón de impresión a la pantalla de tu aplicación en el lugar deseado.Add a print button to your app's screen where you'd like it to appear. Asegúrate de que no interfiera con el contenido que deseas imprimir.Make sure that it doesn't interfere with the content that you want to print.

<Button x:Name="InvokePrintingButton" Content="Print" Click="OnPrintButtonClick"/>

A continuación, agrega un controlador de eventos al código de la aplicación para controlar el evento "Click".Next, add an event handler to your app's code to handle the click event. Usa el método ShowPrintUIAsync para iniciar la impresión desde la aplicación.Use the ShowPrintUIAsync method to start printing from your app. ShowPrintUIAsync es un método asincrónico que muestra la ventana de impresión apropiada.ShowPrintUIAsync is an asynchronous method that displays the appropriate printing window. Te recomendamos llamar al método IsSupported primero con el fin de comprobar que la aplicación se ejecuta en un dispositivo que admite impresión (y controlar en caso de que no la admita).We recommend calling the IsSupported method first in order to check that the app is being run on a device that supports printing (and handle the case in which it is not). Si no se puede realizar la impresión en ese momento por cualquier otro motivo, ShowPrintUIAsync iniciará una excepción.If printing can't be performed at that time for any other reason, ShowPrintUIAsync will throw an exception. Te recomendamos capturar estas excepciones y notificar al usuario cuando no se pueda continuar con la impresión.We recommend catching these exceptions and letting the user know when printing can't proceed.

En este ejemplo, se muestra una ventana de impresión en el controlador de eventos para un clic de botón.In this example, a print window is displayed in the event handler for a button click. Si el método genera una excepción (porque no se puede realizar la impresión en ese momento), el control ContentDialog informa al usuario de la situación.If the method throws an exception (because printing can't be performed at that time), a ContentDialog control informs the user of the situation.

async private void OnPrintButtonClick(object sender, RoutedEventArgs e)
{
    if (Windows.Graphics.Printing.PrintManager.IsSupported())
    {
        try
        {
            // Show print UI
            await Windows.Graphics.Printing.PrintManager.ShowPrintUIAsync();

        }
        catch
        {
            // Printing cannot proceed at this time
            ContentDialog noPrintingDialog = new ContentDialog()
            {
                Title = "Printing error",
                Content = "\nSorry, printing can' t proceed at this time.", PrimaryButtonText = "OK"
            };
            await noPrintingDialog.ShowAsync();
        }
    }
    else
    {
        // Printing is not supported on this device
        ContentDialog noPrintingDialog = new ContentDialog()
        {
            Title = "Printing not supported",
            Content = "\nSorry, printing is not supported on this device.",PrimaryButtonText = "OK"
        };
        await noPrintingDialog.ShowAsync();
    }
}

Aplicar formato al contenido de la aplicaciónFormat your app's content

Cuando llamas a ShowPrintUIAsync, se genera el evento PrintTaskRequested.When ShowPrintUIAsync is called, the PrintTaskRequested event is raised. El controlador de eventos PrintTaskRequested que se muestra en este paso, crea una clase PrintTask llamando al método PrintTaskRequest.CreatePrintTask; a continuación, pasa el título de la página de impresión y el nombre de un delegado PrintTaskSourceRequestedHandler.The PrintTaskRequested event handler shown in this step creates a PrintTask by calling the PrintTaskRequest.CreatePrintTask method and passes the title for the print page and the name of a PrintTaskSourceRequestedHandler delegate. Ten en cuenta que en este ejemplo, el delegado PrintTaskSourceRequestedHandler se define en línea.Notice that in this example, the PrintTaskSourceRequestedHandler is defined inline. Igualmente, el delegado PrintTaskSourceRequestedHandler te proporciona el contenido formateado para imprimir; más adelante lo describiremos con más detalle.The PrintTaskSourceRequestedHandler provides the formatted content for printing and is described later.

En este ejemplo, se define también un controlador de finalización para capturar errores.In this example, a completion handler is also defined to catch errors. 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.It's a good idea to handle completion events because then your app can let the user know if an error occurred and provide possible solutions. De la misma manera, la aplicación puede usar el evento de finalización para indicar los pasos que el usuario debe seguir después de que el trabajo de impresión se haya completado correctamente.Likewise, your app could use the completion event to indicate subsequent steps for the user to take after the print job is successful.

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 scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     MainPage.Current.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 mostrarlas en la interfaz de usuario de la vista previa de impresión; para ello, genera el evento Paginate.After the print task is created, the PrintManager requests a collection of print pages to show in the print preview UI by raising the Paginate event. Esto corresponde al método Paginate de la interfaz IPrintPreviewPageCollection.This corresponds with the Paginate method of the IPrintPreviewPageCollection interface. En ese momento, se llamará al controlador de eventos que creaste durante el registro.The event handler you created during registration will be called at this time.

Importante

 Si el usuario cambia la configuración de impresión, se llamará de nuevo al controlador de eventos paginable para que pueda redistribuir el contenido. If the user changes print settings, the paginate event handler will be called again to allow you to reflow the content. Para ofrecer la mejor experiencia de usuario, te recomendamos que compruebes la configuración antes de redistribuir el contenido, para evitar reiniciar el contenido paginado cuando no sea necesario.For the best user experience, we recommend checking the settings before you reflow the content and avoid reinitializing the paginated content when it's not necessary.

En el controlador de eventos Paginate (el método CreatePrintPreviewPages de la muestra de impresión para UWP), crea las páginas que se muestran en la interfaz de usuario de la vista previa de impresión y que se envían a la impresora.In the Paginate event handler (the CreatePrintPreviewPages method in the UWP print sample), create the pages to show in the print preview UI and to send to the printer. 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.The code you use to prepare your app's content for printing is specific to your app and the content you print. Consulta la muestra de impresión para UWP para ver cómo se aplica el formato al contenido de impresión.Refer to the UWP print sample source code to see how it formats its content for printing.

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

   // Clear the print canvas of preview pages
   PrintCanvas.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 (PreviewPagesCreated != null)
   {
         PreviewPagesCreated.Invoke(printPreviewPages, null);
   }

   PrintDocument printDoc = (PrintDocument)sender;

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

Cuando una página determinada se va a mostrar en la ventana de vista previa de impresión, PrintManager genera el evento GetPreviewPage.When a particular page is to be shown in the print preview window, the PrintManager raises the GetPreviewPage event. Esto corresponde al método MakePage de la interfaz IPrintPreviewPageCollection.This corresponds with the MakePage method of the IPrintPreviewPageCollection interface. En ese momento, se llamará al controlador de eventos que creaste durante el registro.The event handler you created during registration will be called at this time.

En el controlador de eventos GetPreviewPage (el método GetPrintPreviewPage de la muestra de impresión para UWP), establece la página correspondiente en el documento de impresión.In the GetPreviewPage event handler (the GetPrintPreviewPage method in the UWP print sample), set the appropriate page on the print document.

protected virtual void GetPrintPreviewPage(object sender, GetPreviewPageEventArgs e)
{
   PrintDocument printDoc = (PrintDocument)sender;
   printDoc.SetPreviewPage(e.PageNumber, printPreviewPages[e.PageNumber - 1]);
}

Por último, una vez que el usuario hace clic en el botón de impresión, la clase PrintManager solicita la colección final de páginas que se enviará a la impresora mediante una llamada al método MakeDocument de la interfaz IDocumentPageSource.Finally, once the user clicks the print button, the PrintManager requests the final collection of pages to send to the printer by calling the MakeDocument method of the IDocumentPageSource interface. En XAML, esto genera el evento AddPages.In XAML, this raises the AddPages event. En ese momento, se llamará al controlador de eventos que creaste durante el registro.The event handler you created during registration will be called at this time.

En el controlador de eventos AddPages (el método AddPrintPages de la muestra de impresión para UWP), agrega páginas de la colección de páginas al objeto PrintDocument que se va a enviar a la impresora.In the AddPages event handler (the AddPrintPages method in the UWP print sample), add pages from the page collection to the PrintDocument object to be sent to the printer. Si un usuario especifica páginas concretas o un intervalo de páginas para imprimir, dicha información se usa aquí para agregar solamente las páginas que se enviarán a la impresora.If a user specifies particular pages or a range of pages to print, you use that information here to add only the pages that will actually be sent to the printer.

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

Preparar las opciones de impresiónPrepare print options

A continuación, hay que preparar las opciones de impresión.Next prepare print options. Por ejemplo, esta sección describe cómo establecer la opción de intervalo de página para permitir la impresión de páginas específicas.As an example, this section will describe how to set the page range option to allow printing of specific pages. Para opciones más avanzadas, consulta Personalizar la interfaz de usuario de vista previa de impresión.For more advanced options, see Customize the print preview UI.

En este paso se crea una nueva opción de impresión, se define una lista de los valores compatibles con la opción y después se agrega la opción a la interfaz de usuario de vista previa de impresión.This step creates a new print option, defines a list of values that the option supports, and then adds the option to the print preview UI. La opción de intervalo de páginas tiene tres opciones de configuración:The page range option has these settings:

Nombre de la opciónOption name AcciónAction
Imprimir todoPrint all Imprimir todas las páginas del documento.Print all pages in the document.
Imprimir selecciónPrint Selection Imprimir solo el contenido seleccionado por el usuario.Print only the content the user selected.
Intervalo de impresiónPrint Range Mostrar un control de edición en que el usuario pueda especificar las páginas que va a imprimir.Display an edit control into which the user can enter the pages to print.

En primer lugar, modifica el controlador de eventos PrintTaskRequested para agregar el código que te permitirá obtener un objeto PrintTaskOptionDetails.First, modify the PrintTaskRequested event handler to add the code to get a PrintTaskOptionDetails object.

PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);

A continuación, borra la lista de opciones que se muestran en la interfaz de usuario de la vista previa de impresión y agrega las opciones que aparecerán cuando el usuario quiera imprimir desde la aplicación.Clear the list of options that are shown in the print preview UI and add the options that you want to display when the user wants to print from the app.

Nota

 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. The options appear in the print preview UI in the same order they are appended, with the first option shown at the top of the window.

IList<string> displayedOptions = printDetailedOptions.DisplayedOptions;

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

Crea la nueva opción de impresión e inicializa la lista de valores de opción.Create the new print option and initialize the list of option values.

// Create a new list option
PrintCustomItemListOptionDetails pageFormat = printDetailedOptions.CreateItemListOption("PageRange", "Page Range");
pageFormat.AddItem("PrintAll", "Print all");
pageFormat.AddItem("PrintSelection", "Print Selection");
pageFormat.AddItem("PrintRange", "Print Range");

Agrega la opción de impresión personalizada y asigna el controlador de eventos.Add your custom print option and assign the event handler. La opción personalizada se anexa al final para que aparezca en la parte inferior de la lista de opciones.The custom option is appended last so that it appears at the bottom of the list of options. No obstante, puedes colocarla en cualquier parte de la lista; no es necesario agregar las opciones de impresión personalizadas al final.But you can put it anywhere in the list, custom print options don't need to be added last.

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

// Create new edit option
PrintCustomTextOptionDetails pageRangeEdit = printDetailedOptions.CreateTextOption("PageRangeEdit", "Range");

// Register the handler for the option change event
printDetailedOptions.OptionChanged += printDetailedOptions_OptionChanged;

El método CreateTextOption crea el cuadro de texto Intervalo.The CreateTextOption method creates the Range text box. En ese cuadro, el usuario indica las páginas específicas que quiere imprimir cuando selecciona la opción Intervalo de impresión.This is where the user enters the specific pages they want to print when they select the Print Range option.

Controlar los cambios de opciones de impresiónHandle print option changes

El controlador de eventos OptionChanged realiza dos tareas.The OptionChanged event handler does two things. En primer lugar, muestra y oculta el campo de edición de texto del intervalo de páginas en función de la opción de intervalo de páginas que seleccione el usuario.First, it shows and hides the text edit field for the page range depending on the page range option that the user selected. En segundo lugar, prueba el texto especificado en el cuadro de texto del intervalo de páginas para asegurarse de que el intervalo de páginas del documento sea válido.Second, it tests the text entered into the page range text box to make sure that it represents a valid page range for the document.

En este ejemplo se muestra cómo se controlan los eventos de cambio de la opción de impresión en el ejemplo de impresión de UWP.This example shows how print option change events are handled in the UWP print sample.

async void printDetailedOptions_OptionChanged(PrintTaskOptionDetails sender, PrintTaskOptionChangedEventArgs args)
{
   if (args.OptionId == null)
   {
         return;
   }

   string optionId = args.OptionId.ToString();

   // Handle change in Page Range Option
   if (optionId == "PageRange")
   {
         IPrintOptionDetails pageRange = sender.Options[optionId];
         string pageRangeValue = pageRange.Value.ToString();

         selectionMode = false;

         switch (pageRangeValue)
         {
            case "PrintRange":
               // Add PageRangeEdit custom option to the option list
               sender.DisplayedOptions.Add("PageRangeEdit");
               pageRangeEditVisible = true;
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     ShowContent(null);
               });
               break;
            case "PrintSelection":
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     Scenario4PageRange page = (Scenario4PageRange)scenarioPage;
                     PageToPrint pageContent = (PageToPrint)page.PrintFrame.Content;
                     ShowContent(pageContent.TextContentBlock.SelectedText);
               });
               RemovePageRangeEdit(sender);
               break;
            default:
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     ShowContent(null);
               });
               RemovePageRangeEdit(sender);
               break;
         }

         Refresh();
   }
   else if (optionId == "PageRangeEdit")
   {
         IPrintOptionDetails pageRange = sender.Options[optionId];
         // Expected range format (p1,p2...)*, (p3-p9)* ...
         if (!Regex.IsMatch(pageRange.Value.ToString(), @"^\s*\d+\s*(\-\s*\d+\s*)?(\,\s*\d+\s*(\-\s*\d+\s*)?)*$"))
         {
            pageRange.ErrorText = "Invalid Page Range (eg: 1-3, 5)";
         }
         else
         {
            pageRange.ErrorText = string.Empty;
            try
            {
               GetPagesInRange(pageRange.Value.ToString());
               Refresh();
            }
            catch (InvalidPageException ipex)
            {
               pageRange.ErrorText = ipex.Message;
            }
         }
   }
}

Sugerencia

 Vea el GetPagesInRange método en el ejemplo de impresión de UWP para obtener más información sobre cómo analizar el intervalo de páginas que el usuario escribe en el cuadro de texto intervalo. See the GetPagesInRange method in the UWP print sample for details on how to parse the page range the user enters in the Range text box.

Obtener una vista previa de las páginas seleccionadasPreview selected pages

El modo en que se aplica formato al contenido de tu aplicación para impresión depende de la naturaleza de la aplicación y su contenido.How you format your app's content for printing depends on the nature of your app and its content. Una clase de aplicación auxiliar de impresión en usada en el ejemplo de impresión de UWP para dar formato al contenido para su impresión.A print helper class in used in the UWP print sample to format the content for printing.

Al imprimir un subconjunto de páginas, hay varias formas de mostrar el contenido en la vista previa de impresión.When printing a subset of pages, there are several ways to show the content in the print preview. Independientemente del método que elijas para mostrar el intervalo de páginas de la vista previa de impresión, el resultado impreso debe contener solo las páginas seleccionadas.Regardless of the method you chose to show the page range in the print preview, the printed output must contain only the selected pages.

  • Mostrar todas las páginas de la vista previa de impresión ya se especifique o no un intervalo de páginas, permitiendo que el usuario sepa qué páginas se van a imprimir realmente.Show all the pages in the print preview whether a page range is specified or not, leaving the user to know which pages will actually be printed.
  • Mostrar solo las páginas seleccionadas por el intervalo de páginas del usuario en la vista previa de impresión, actualizando la pantalla cuando el usuario cambie el intervalo de páginas.Show only the pages selected by the user's page range in the print preview, updating the display whenever the user changes the page range.
  • Mostrar todas las páginas de la vista previa de impresión, pero desactivar las páginas que no estén en el intervalo de páginas seleccionado por el usuario.Show all the pages in print preview, but grey out the pages that are not in page range selected by the user.