Бөлісу құралы:


Печать из приложений WebView2

Существует несколько различных способов печати веб-страницы в WebView2, которые предоставляют различные уровни простоты реализации и настройки.

Метод Описание
ShowPrintUI Открывает диалоговое окно Предварительный просмотр WebView2 или диалоговое окно печати операционной системы. Простота реализации, минимальная поддержка настройки.
Print Автоматически выводит текущий документ верхнего уровня в WebView2 с помощью дополнительных программных параметров печати на принтере. Его можно использовать для создания собственного диалогового окна предварительного просмотра или печати.
PrintToPdf Автоматически выводит текущий документ верхнего уровня в WebView2 в PDF-файл. Его можно использовать для создания собственного кода для печати PDF-файла.
PrintToPdfStream Автоматически выводит текущий документ верхнего уровня в WebView2 в PDF-поток. Его можно использовать для создания собственного кода для печати PDF-файла.

Метод ShowPrintUI для открытия диалогового окна печати

Метод ShowPrintUI открывает диалоговое окно предварительного просмотра WebView2 или диалоговое окно печати операционной системы для текущего документа верхнего уровня в элементе управления WebView2. Используя этот подход, вы можете легко обеспечить знакомый интерфейс печати для пользователей.

Пример. Метод ShowPrintUI для открытия диалогового окна печати

В этом примере пользователю показано диалоговое окно "Печать ".

  • Если printDialog имеет значение CoreWebView2PrintDialogKind.Browser, открывается диалоговое окно предварительного просмотра в браузере.
  • Если printDialog имеет значение CoreWebView2PrintDialogKind.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. Метод печати для печати на указанном принтере с использованием пользовательских параметров печати

В этом примере текущая веб-страница выводится на определенный принтер с использованием указанных параметров.

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

Метод PrintToPdf для печати в PDF-файл с использованием пользовательских параметров печати

Автоматически выводит текущий документ верхнего уровня в элементе управления WebView2 в PDF-файл. Чтобы полностью контролировать выполнение печати, можно распечатать в PDF-файл, а затем создать собственный код для печати PDF.

Этот API состоит из асинхронного PrintToPdf метода и PrintSettings объекта . Метод PrintToPdf принимает путь, по которому будет сохранен PDF-файл.

Пример. Метод PrintToPdf для печати в PDF-файл с использованием пользовательских параметров печати

В этом примере текущая веб-страница выводится в 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");
    }
}

Метод PrintToPdfStream для печати в потоке PDF с использованием пользовательских параметров печати

Автоматически выводит текущий документ верхнего уровня в элементе управления WebView2 в ПОТОК PDF. Чтобы полностью контролировать выполнение печати, можно распечатать в PDF-файл, а затем создать собственный код для печати PDF. Этот API состоит из асинхронного PrintToPdfStream метода и PrintSettings объекта .

Пример. Метод PrintToPdfStream для печати в потоке PDF с использованием пользовательских параметров печати

В этом примере 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.
}

См. также