Freigeben über


Drucken aus WebView2-Apps

Es gibt verschiedene Möglichkeiten, eine Webseite in WebView2 zu drucken, die Ihnen verschiedene Ebenen der Implementierung und Anpassung ermöglichen.

Methode Beschreibung
ShowPrintUI Öffnet das Dialogfeld WebView2 Print Preview oder das Dialogfeld Drucken des Betriebssystems. Einfach zu implementieren, minimale Unterstützung für das Anpassen.
Print Druckt das aktuelle Dokument der obersten Ebene im Hintergrund in WebView2 mithilfe optionaler programmgesteuerter Druckeinstellungen auf einem Drucker. Sie können dies verwenden, um ein eigenes Druckvorschaudialogfeld oder eine eigene Druckoberfläche zu erstellen.
PrintToPdf Druckt das aktuelle Dokument der obersten Ebene in WebView2 im Hintergrund in einer PDF-Datei. Sie können dies verwenden, um Ihren eigenen Code zum Drucken der PDF-Datei zu erstellen.
PrintToPdfStream Druckt das aktuelle Dokument der obersten Ebene in WebView2 im Hintergrund in einem PDF-Stream. Sie können dies verwenden, um Ihren eigenen Code zum Drucken der PDF-Datei zu erstellen.

Die ShowPrintUI-Methode zum Öffnen eines Druckdialogfelds

Die ShowPrintUI -Methode öffnet das Dialogfeld WebView2-Druckvorschau oder das Dialogfeld Drucken des Betriebssystems für das aktuelle Dokument der obersten Ebene im WebView2-Steuerelement. Mit diesem Ansatz können Sie benutzern problemlos eine vertraute Druckoberfläche bereitstellen.

Beispiel: Die ShowPrintUI-Methode zum Öffnen eines Druckdialogfelds

In diesem Beispiel wird dem Benutzer ein Dialogfeld "Drucken " angezeigt.

  • Wenn printDialog ist CoreWebView2PrintDialogKind.Browser, wird das Dialogfeld Seitenansicht des Browsers geöffnet.
  • Wenn printDialog auf festgelegt ist CoreWebView2PrintDialogKind.System, wird ein Systemdruckdialogfeld geöffnet.
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);
  }
}

Die Print-Methode zum Anpassen des Druckens

Die Print -Methode druckt das aktuelle Dokument der obersten Ebene im WebView2-Steuerelement mithilfe optionaler, programmgesteuerter Druckeinstellungen im Hintergrund. Wenn Sie ein eigenes Dialogfeld für die Druckvorschau erstellen oder eine eigene Druckoberfläche erstellen möchten, können Sie diese Methode verwenden. Diese API besteht aus einer asynchronen Print Methode und einem PrintSettings -Objekt.

Beispiel 1: Die Print-Methode ohne Dialogfeld mit Standarddruckeinstellungen

In diesem Beispiel wird die aktuelle Webseite mit den Standarddruckeinstellungen auf dem Standarddrucker gedruckt, ohne dass ein Dialogfeld Drucken geöffnet wird.

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

Beispiel 2: Die Print-Methode zum Drucken auf einem angegebenen Drucker mit benutzerdefinierten Druckeinstellungen

In diesem Beispiel wird die aktuelle Webseite mit den angegebenen Einstellungen auf einem bestimmten Drucker gedruckt.

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.
}

Die PrintToPdf-Methode zum Drucken in einer PDF-Datei mit benutzerdefinierten Druckeinstellungen

Druckt das aktuelle Dokument der obersten Ebene im WebView2-Steuerelement im Hintergrund in einer PDF-Datei. Um die Druckvorgangsfunktion vollständig zu steuern, können Sie in einer PDF-Datei drucken und dann Ihren eigenen Code erstellen, um die PDF-Datei zu drucken.

Diese API besteht aus einer asynchronen PrintToPdf Methode und einem PrintSettings -Objekt. Die PrintToPdf -Methode akzeptiert einen Pfad, in dem die PDF-Datei gespeichert wird.

Beispiel: Die PrintToPdf-Methode zum Drucken in einer PDF-Datei mit benutzerdefinierten Druckeinstellungen

In diesem Beispiel wird die aktuelle Webseite unter Verwendung des Standardpfads und der Standardeinstellungen in eine PDF-Datei gedruckt.

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

Die PrintToPdfStream-Methode zum Drucken in einem PDF-Stream mithilfe benutzerdefinierter Druckeinstellungen

Druckt das aktuelle Dokument der obersten Ebene im WebView2-Steuerelement im Hintergrund in einem PDF-Stream. Um die Druckvorgangsfunktion vollständig zu steuern, können Sie in einer PDF-Datei drucken und dann Ihren eigenen Code erstellen, um die PDF-Datei zu drucken. Diese API besteht aus einer asynchronen PrintToPdfStream Methode und einem PrintSettings -Objekt.

Beispiel: Die PrintToPdfStream-Methode zum Drucken in einem PDF-Stream mit benutzerdefinierten Druckeinstellungen

In diesem Beispiel werden die PDF-Daten der aktuellen Webseite in einem Stream gedruckt.

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.
}

Siehe auch