次の方法で共有


WebView2 アプリからの印刷

WebView2 で Web ページを印刷する方法はいくつかあります。これにより、実装とカスタマイズのさまざまなレベルが簡単になります。

メソッド 説明
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 メソッド

次の使用例は、[印刷] ダイアログを開かずに、既定の印刷設定を使用して、現在の Web ページを既定のプリンターに 印刷 します。

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 メソッド

次の使用例は、指定した設定を使用して、現在の Web ページを特定のプリンターに印刷します。

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 メソッド

次の使用例は、既定のパスと設定を使用して、現在の Web ページを 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 メソッド

次の使用例は、現在の Web ページの 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.
}

関連項目