interface ICoreWebView2Experimental17
Note
This reference is no longer being maintained. For the latest API reference, see WebView2 API Reference.
Note
This an experimental API that is shipped with our prerelease SDK. See WebView2 release notes.
interface ICoreWebView2Experimental17
: public IUnknown
A continuation of the ICoreWebView2 interface to support printing.
Summary
Members | Descriptions |
---|---|
Print the current web page asynchronously to the specified printer with the provided settings. | |
PrintToPdfStream | Provides the Pdf data of current web page asynchronously for the provided settings. |
ShowPrintUI | Opens the print dialog to print the current web page. |
Applies to
Product | Introduced |
---|---|
WebView2 Win32 | N/A |
WebView2 Win32 Prerelease | 1.0.1414 |
Members
Print the current web page asynchronously to the specified printer with the provided settings.
public HRESULT Print(ICoreWebView2PrintSettings * printSettings, ICoreWebView2ExperimentalPrintCompletedHandler * handler)
See ICoreWebView2PrintSettings for description of settings. Passing nullptr for printSettings
results in default print settings used.
The handler will return errorCode
as S_OK
and printStatus
as COREWEBVIEW2_PRINT_STATUS_PRINTER_UNAVAILABLE if printerName
doesn't match with the name of any installed printers on the user OS. The handler will return errorCode
as E_INVALIDARG
and printStatus
as COREWEBVIEW2_PRINT_STATUS_OTHER_ERROR if the caller provides invalid settings for a given printer.
The async Print
operation completes when it finishes printing to the printer. At this time the ICoreWebView2PrintCompletedHandler
is invoked. Only one Printing
operation can be in progress at a time. If Print
is called while a Print
or PrintToPdf
or PrintToPdfStream
job is in progress, the completed handler is immediately invoked with E_ABORT
and printStatus
is COREWEBVIEW2_PRINT_STATUS_OTHER_ERROR. This is only for printing operation on one webview.
errorCode | printStatus | Notes |
---|---|---|
S_OK | COREWEBVIEW2_PRINT_STATUS_SUCCEEDED | Print operation succeeded. |
S_OK | COREWEBVIEW2_PRINT_STATUS_PRINTER_UNAVAILABLE | If specified printer is not found or printer status is not available, offline or error state. |
S_OK | COREWEBVIEW2_PRINT_STATUS_OTHER_ERROR | Print operation is failed. |
E_INVALIDARG | COREWEBVIEW2_PRINT_STATUS_OTHER_ERROR | If the caller provides invalid settings for the specified printer. |
E_ABORT | COREWEBVIEW2_PRINT_STATUS_OTHER_ERROR | Print operation is failed as printing job already in progress. |
// This example prints the current web page to a specified printer with the settings.
bool AppWindow::PrintToPrinter()
{
std::wstring printerName = GetPrinterName();
// Host apps custom print settings based on the user selection.
SamplePrintSettings samplePrintSettings = GetSelectedPrinterPrintSettings(printerName);
wil::com_ptr<ICoreWebView2Experimental17> webView2Experimental17;
CHECK_FAILURE(m_webView->QueryInterface(IID_PPV_ARGS(&webView2Experimental17)));
wil::com_ptr<ICoreWebView2Environment6> webviewEnvironment6;
CHECK_FAILURE(m_webViewEnvironment->QueryInterface(IID_PPV_ARGS(&webviewEnvironment6)));
wil::com_ptr<ICoreWebView2PrintSettings> printSettings;
CHECK_FAILURE(webviewEnvironment6->CreatePrintSettings(&printSettings));
wil::com_ptr<ICoreWebView2ExperimentalPrintSettings2> printSettings2;
CHECK_FAILURE(printSettings->QueryInterface(IID_PPV_ARGS(&printSettings2)));
CHECK_FAILURE(printSettings->put_Orientation(samplePrintSettings.Orientation));
CHECK_FAILURE(printSettings2->put_Copies(samplePrintSettings.Copies));
CHECK_FAILURE(printSettings2->put_PagesPerSide(samplePrintSettings.PagesPerSide));
CHECK_FAILURE(printSettings2->put_PageRanges(samplePrintSettings.Pages.c_str()));
if (samplePrintSettings.Media == COREWEBVIEW2_PRINT_MEDIA_SIZE_CUSTOM)
{
CHECK_FAILURE(printSettings->put_PageWidth(samplePrintSettings.PaperWidth));
CHECK_FAILURE(printSettings->put_PageHeight(samplePrintSettings.PaperHeight));
}
CHECK_FAILURE(printSettings2->put_ColorMode(samplePrintSettings.ColorMode));
CHECK_FAILURE(printSettings2->put_Collation(samplePrintSettings.Collation));
CHECK_FAILURE(printSettings2->put_Duplex(samplePrintSettings.Duplex));
CHECK_FAILURE(printSettings->put_ScaleFactor(samplePrintSettings.ScaleFactor));
CHECK_FAILURE(
printSettings->put_ShouldPrintBackgrounds(samplePrintSettings.PrintBackgrounds));
CHECK_FAILURE(
printSettings->put_ShouldPrintBackgrounds(samplePrintSettings.PrintBackgrounds));
CHECK_FAILURE(
printSettings->put_ShouldPrintHeaderAndFooter(samplePrintSettings.HeaderAndFooter));
CHECK_FAILURE(printSettings->put_HeaderTitle(samplePrintSettings.HeaderTitle.c_str()));
CHECK_FAILURE(printSettings->put_FooterUri(samplePrintSettings.FooterUri.c_str()));
CHECK_FAILURE(printSettings2->put_PrinterName(printerName.c_str()));
wil::unique_cotaskmem_string title;
CHECK_FAILURE(m_webView->get_DocumentTitle(&title));
CHECK_FAILURE(webView2Experimental17->Print(
printSettings.get(),
Callback<ICoreWebView2ExperimentalPrintCompletedHandler>(
[title = std::move(title),
this](HRESULT errorCode, COREWEBVIEW2_PRINT_STATUS printStatus) -> HRESULT
{
std::wstring message = L"";
if (errorCode == S_OK && printStatus == COREWEBVIEW2_PRINT_STATUS_SUCCEEDED)
{
message = L"Printing " + std::wstring(title.get()) +
L" document to printer is succedded";
}
else if (
errorCode == S_OK &&
printStatus == COREWEBVIEW2_PRINT_STATUS_PRINTER_UNAVAILABLE)
{
message = L"Selected printer is not found, not available, offline or "
L"error state.";
}
else if (errorCode == E_INVALIDARG)
{
message = L"Invalid settings provided for the specified printer";
}
else if (errorCode == E_ABORT)
{
message = L"Printing " + std::wstring(title.get()) +
L" document already in progress";
}
else
{
message = L"Printing " + std::wstring(title.get()) +
L" document to printer is failed";
}
AsyncMessageBox(message, L"Print to printer");
return S_OK;
})
.Get()));
return true;
}
PrintToPdfStream
Provides the Pdf data of current web page asynchronously for the provided settings.
public HRESULT PrintToPdfStream(ICoreWebView2PrintSettings * printSettings, ICoreWebView2ExperimentalPrintToPdfStreamCompletedHandler * handler)
Stream will be rewound to the start of the pdf data.
See ICoreWebView2PrintSettings for description of settings. Passing nullptr for printSettings
results in default print settings used.
The async PrintToPdfStream
operation completes when it finishes writing to the stream. At this time the ICoreWebView2PrintToPdfStreamCompletedHandler
is invoked. Only one Printing
operation can be in progress at a time. If PrintToPdfStream
is called while a PrintToPdfStream
or PrintToPdf
or Print
job is in progress, the completed handler is immediately invoked with E_ABORT
. This is only for printing operation on one webview.
// This example prints the Pdf data of the current page to a stream.
bool AppWindow::PrintToPdfStream()
{
wil::com_ptr<ICoreWebView2Experimental17> webView2Experimental17;
CHECK_FAILURE(m_webView->QueryInterface(IID_PPV_ARGS(&webView2Experimental17)));
wil::unique_cotaskmem_string title;
CHECK_FAILURE(m_webView->get_DocumentTitle(&title));
// Passing nullptr for `ICoreWebView2PrintSettings` results in default print settings used.
CHECK_FAILURE(webView2Experimental17->PrintToPdfStream(
nullptr,
Callback<ICoreWebView2ExperimentalPrintToPdfStreamCompletedHandler>(
[title = std::move(title), this](HRESULT errorCode, IStream* pdfData) -> HRESULT
{
DisplayPdfDataInPrintDialog(pdfData);
std::wstring message =
L"Printing " + std::wstring(title.get()) + L" document to PDF Stream " +
((errorCode == S_OK && pdfData != nullptr) ? L"succedded" : L"failed");
AsyncMessageBox(message, L"Print to PDF Stream");
return S_OK;
})
.Get()));
return true;
}
ShowPrintUI
Opens the print dialog to print the current web page.
public HRESULT ShowPrintUI(COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind)
See COREWEBVIEW2_PRINT_DIALOG_KIND
for descriptions of print dialog kinds.
Invoking browser or system print dialog doesn't open new print dialog if it is already open.
// Shows the user a print dialog. If `printDialogKind` is
// COREWEBVIEW2_PRINT_DIALOG_KIND_BROWSER, opens a browser print preview dialog,
// COREWEBVIEW2_PRINT_DIALOG_KIND_SYSTEM opens a system print dialog.
bool AppWindow::ShowPrintUI(COREWEBVIEW2_PRINT_DIALOG_KIND printDialogKind)
{
auto webView2Experimental17 = m_webView.try_query<ICoreWebView2Experimental17>();
CHECK_FEATURE_RETURN(webView2Experimental17);
CHECK_FAILURE(webView2Experimental17->ShowPrintUI(printDialogKind));
return true;
}