Compartir a través de


Impresión desde aplicaciones WebView2

Hay varias maneras diferentes de imprimir una página web en WebView2, lo que le ofrece varios niveles de facilidad de implementación y personalización.

Método Descripción
ShowPrintUI Abre el cuadro de diálogo Vista previa de impresión WebView2 o el cuadro de diálogo Imprimir del sistema operativo. Compatibilidad mínima y fácil de implementar para personalizar.
Print Imprime silenciosamente el documento de nivel superior actual en WebView2 mediante la configuración de impresión especificada mediante programación opcional en una impresora. Puede usarlo para crear su propio cuadro de diálogo de vista previa de impresión o experiencia de impresión.
PrintToPdf Imprime silenciosamente el documento de nivel superior actual en WebView2 en un archivo PDF. Puede usarlo para crear su propio código para imprimir el archivo PDF.
PrintToPdfStream Imprime silenciosamente el documento de nivel superior actual en WebView2 en una secuencia PDF. Puede usarlo para crear su propio código para imprimir el PDF.

El método ShowPrintUI para abrir un cuadro de diálogo Imprimir

El ShowPrintUI método abre el cuadro de diálogo Vista previa de impresión de WebView2 o el cuadro de diálogo Imprimir del sistema operativo para el documento de nivel superior actual en el control WebView2. Con este enfoque, puede proporcionar fácilmente una experiencia de impresión familiar para los usuarios.

Ejemplo: El método ShowPrintUI para abrir un cuadro de diálogo Imprimir

En este ejemplo se muestra al usuario un cuadro de diálogo Imprimir .

  • Si printDialog es CoreWebView2PrintDialogKind.Browser, abre el cuadro de diálogo Vista previa de impresión del explorador.
  • Si printDialog es CoreWebView2PrintDialogKind.System, abre un cuadro de diálogo Imprimir del sistema.
void ShowPrintUI(object target, ExecutedRoutedEventArgs e)
{
  string printDialog = e.Parameter.ToString();
  if (printDialog == "Browser")
  {
    // Opens the browser's Print Preview dialog.
    webView.CoreWebView2.ShowPrintUI();
  }
  else
  {
    // Opens a system's Print dialog.
    webView.CoreWebView2.ShowPrintUI(CoreWebView2PrintDialogKind.System);
  }
}

Método Print para personalizar la impresión

El Print método imprime silenciosamente el documento de nivel superior actual en el control WebView2 mediante la configuración de impresión opcional especificada mediante programación. Si desea crear su propio cuadro de diálogo Vista previa de impresión o crear su propia experiencia de impresión, puede usar este método. Esta API consta de un método asincrónico Print y un PrintSettings objeto .

Ejemplo 1: El método Print sin un cuadro de diálogo, con la configuración de impresión predeterminada

En este ejemplo se imprime la página web actual en la impresora predeterminada, con la configuración de impresión predeterminada, sin abrir un cuadro de diálogo Imprimir .

async void PrintToDefaultPrinter ()
{
  string title = webView.CoreWebView2.DocumentTitle;
  try
  {
    // Prints the current webpage, using the default printer and page settings.
    // Passing null for PrintSettings causes the default print settings to be used.
    CoreWebView2PrintStatus printStatus = await webView.CoreWebView2.PrintAsync(null);

    if (printStatus == CoreWebView2PrintStatus.Succeeded)
    {
      MessageBox.Show(this, "Printing " + title + " document to printer succeeded", "Print to default printer");
    }
    else if (printStatus == CoreWebView2PrintStatus.PrinterUnavailable)
    {
      MessageBox.Show(this, "Printer is not available, offline or error state", "Print to default printer");
    }
    else
    {
      MessageBox.Show(this, "Printing " + title + " document to printer is failed", "Print to default printer");
    }
  }
  catch (Exception)
  {
    MessageBox.Show(this, "Printing " + title + " document already in progress", "Print to default printer");
  }
}

Ejemplo 2: El método Print para imprimir en una impresora especificada mediante la configuración de impresión personalizada

En este ejemplo se imprime la página web actual en una impresora específica, utilizando la configuración especificada.

async void PrintToPrinter()
{
  string printerName = GetPrinterName();
  CoreWebView2PrintSettings printSettings = GetSelectedPrinterPrintSettings(printerName);
  string title = webView.CoreWebView2.DocumentTitle;
  try
  {
    CoreWebView2PrintStatus printStatus = await webView.CoreWebView2.PrintAsync(printSettings);

    if (printStatus == CoreWebView2PrintStatus.Succeeded)
    {
      MessageBox.Show(this, "Printing " + title + " document to printer succeeded", "Print to printer");
    }
    else if (printStatus == CoreWebView2PrintStatus.PrinterUnavailable)
    {
      MessageBox.Show(this, "Selected printer is not found, not available, offline or error state", "Print to printer");
    }
    else
    {
      MessageBox.Show(this, "Printing " + title + " document to printer is failed", "Print");
    }
  }
  catch(ArgumentException)
  {
    MessageBox.Show(this, "Invalid settings provided for the specified printer", "Print");
  }
  catch (Exception)
  {
    MessageBox.Show(this, "Printing " + title + " document already in progress", "Print");
  }
}

// Gets the printer name by displaying the list of installed printers to the user and
// returns the name of the user's selected printer.
string GetPrinterName()
{
  // Use GetPrintQueues() of LocalPrintServer from System.Printing to get the list of locally installed printers.
  // Display the list of printers to the user and get the desired printer to use.
  // Return the name of the selected printer.
}

// Gets the print settings for the selected printer.
// You can also get the capabilities from the native printer API, and display them 
// to the user to get the print settings for the current webpage and for the selected printer.
CoreWebView2PrintSettings GetSelectedPrinterPrintSettings(string printerName)
{
  CoreWebView2PrintSettings printSettings = null;
  printSettings = WebViewEnvironment.CreatePrintSettings();
  printSettings.ShouldPrintBackgrounds = true;
  printSettings.ShouldPrintHeaderAndFooter = true;

  return printSettings;

  // or
  // Get PrintQueue for the selected printer and use GetPrintCapabilities() of PrintQueue from System.Printing
  // to get the capabilities of the selected printer.
  // Display the printer capabilities to the user along with the page settings.
  // Return the user selected settings.
}

Método PrintToPdf para imprimir en un archivo PDF mediante la configuración de impresión personalizada

Imprime silenciosamente el documento de nivel superior actual en el control WebView2 en un archivo PDF. Para controlar completamente cómo se realiza la impresión, puede imprimir en un PDF y, a continuación, crear su propio código para imprimir el PDF.

Esta API consta de un método asincrónico PrintToPdf y un PrintSettings objeto . El PrintToPdf método acepta una ruta de acceso en la que se guardará el archivo PDF.

Ejemplo: el método PrintToPdf para imprimir en un archivo PDF mediante la configuración de impresión personalizada

En este ejemplo se imprime la página web actual en un archivo PDF, utilizando la ruta de acceso y la configuración predeterminadas.

async void PrintToPdfCmdExecuted(object target, ExecutedRoutedEventArgs e)
{
    if (_isPrintToPdfInProgress)
    {
        MessageBox.Show(this, "Print to PDF in progress", "Print To PDF");
        return;
    }
    CoreWebView2PrintSettings printSettings = null;
    string orientationString = e.Parameter.ToString();
    if (orientationString == "Landscape")
    {
        printSettings = WebViewEnvironment.CreatePrintSettings();
        printSettings.Orientation =
            CoreWebView2PrintOrientation.Landscape;
    }

    Microsoft.Win32.SaveFileDialog saveFileDialog =
        new Microsoft.Win32.SaveFileDialog();
    saveFileDialog.InitialDirectory = "C:\\";
    saveFileDialog.Filter = "PDF Files|*.pdf";
    Nullable<bool> result = saveFileDialog.ShowDialog();
    if (result == true) {
        _isPrintToPdfInProgress = true;
        bool isSuccessful = await webView.CoreWebView2.PrintToPdfAsync(
            saveFileDialog.FileName, printSettings);
        _isPrintToPdfInProgress = false;
        string message = (isSuccessful) ?
            "Print to PDF succeeded" : "Print to PDF failed";
        MessageBox.Show(this, message, "Print To PDF Completed");
    }
}

El método PrintToPdfStream para imprimir en un flujo PDF mediante la configuración de impresión personalizada

Imprime silenciosamente el documento de nivel superior actual en el control WebView2 en una secuencia PDF. Para controlar completamente cómo se realiza la impresión, puede imprimir en un PDF y, a continuación, crear su propio código para imprimir el PDF. Esta API consta de un método asincrónico PrintToPdfStream y un PrintSettings objeto .

Ejemplo: el método PrintToPdfStream para imprimir en un flujo PDF mediante la configuración de impresión personalizada

En este ejemplo se imprimen los datos PDF de la página web actual en una secuencia.

async void PrintToPdfStream()
{
  try
  {
    string title = webView.CoreWebView2.DocumentTitle;

    // Passing null for PrintSettings causes the default print settings to be used.
    System.IO.Stream stream = await webView.CoreWebView2.PrintToPdfStreamAsync(null);
    DisplayPdfDataInPrintDialog(stream);

    MessageBox.Show(this, "Printing " + title + " document to PDF Stream " +
                ((stream != null) ? "succeeded" : "failed"), "Print To PDF Stream");
  }
  catch(Exception exception)
  {
    MessageBox.Show(this, "Printing to PDF Stream failed: " + exception.Message, "Print to PDF Stream");
  }
}

// Function to display current webpage PDF data in a custom Print Preview dialog.
void DisplayPdfDataInPrintDialog(Stream pdfData)
{
  // You can display the printable PDF data to the user in a custom Print Preview dialog.
}

Consulte también