共用方式為


從 WebView2 應用程式列印

有數種不同的方式可在 WebView2 中列印網頁,這可讓您輕鬆地實作和自訂各種層級。

方法 描述
ShowPrintUI 開啟 WebView2 預覽列印 對話方塊或作業系統的 [ 列印 ] 對話方塊。 容易實作,最少支援自訂。
Print 使用選擇性以程式設計方式指定的列印設定,以無訊息方式列印 WebView2 中目前的最上層檔至印表機。 您可以使用此選項來建置您自己的 [預覽列印] 對話方塊或列印體驗。
PrintToPdf 以無訊息方式將 WebView2 中目前的最上層檔列印到 PDF 檔案。 您可以使用這個來建置自己的程式碼來列印 PDF 檔案。
PrintToPdfStream 以無訊息方式將 WebView2 中目前的最上層檔列印到 PDF 資料流程。 您可以使用此選項來建置自己的程式碼來列印 PDF。

用來開啟 [列印] 對話方塊的 ShowPrintUI 方法

方法 ShowPrintUI 會開啟 WebView2 預覽列印 對話方塊或作業系統的 [列印 ] 對話方塊,用於 WebView2 控制項中的目前最上層檔。 藉由使用此方法,您可以輕鬆地為使用者提供熟悉的列印體驗。

範例:用來開啟 [列印] 對話方塊的 ShowPrintUI 方法

此範例會向使用者顯示 [ 列印 ] 對話方塊。

  • 如果 printDialogCoreWebView2PrintDialogKind.Browser ,則會開啟瀏覽器的 [預覽列印] 對話方塊。
  • 如果 printDialogCoreWebView2PrintDialogKind.System ,則會開啟 [系統列印] 對話方塊。
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);
  }
}

用來自訂列印的 Print 方法

方法 Print 會使用選擇性、以程式設計方式指定的列印設定,以無訊息方式列印 WebView2 控制項中目前的最上層檔。 如果您想要建置自己的 [預覽列印] 對話方塊,或建置自己的列印體驗,您可以使用此方法。 此 API 包含非同步 Print 方法和 PrintSettings 物件。

範例 1:不含對話方塊的 Print 方法,使用預設列印設定

本範例會使用預設列印設定,將目前的網頁列印到預設印表機,而不需開啟 [ 列印 ] 對話方塊。

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

範例 2:使用自訂列印設定列印至指定印表機的 Print 方法

此範例會使用指定的設定,將目前的網頁列印到特定的印表機。

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

使用自訂列印設定列印至 PDF 檔案的 PrintToPdf 方法

以無訊息方式將 WebView2 控制項中的目前最上層檔列印到 PDF 檔案。 若要完全控制列印的執行方式,您可以列印到 PDF,然後建置自己的程式碼來列印 PDF。

此 API 包含非同步 PrintToPdf 方法和 PrintSettings 物件。 方法 PrintToPdf 會接受將儲存 PDF 檔案的路徑。

範例:使用自訂列印設定列印到 PDF 檔案的 PrintToPdf 方法

此範例會使用預設路徑和設定,將目前的網頁列印至 PDF 檔案。

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

使用自訂列印設定列印至 PDF 資料流程的 PrintToPdfStream 方法

以無訊息方式將 WebView2 控制項中的目前最上層檔列印到 PDF 資料流程。 若要完全控制列印的執行方式,您可以列印到 PDF,然後建置自己的程式碼來列印 PDF。 此 API 包含非同步 PrintToPdfStream 方法和 PrintSettings 物件。

範例:使用自訂列印設定列印到 PDF 資料流程的 PrintToPdfStream 方法

本範例會將目前網頁的 PDF 資料列印至資料流程。

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

另請參閱