提前致谢!
在我的应用程序中,我在 WPF 用户控件中嵌入了一个 WebView2 控件。
是否有任何解决方法可以帮助我打印 WebView2 控件?
我发现 Microsoft 提供的当前 WebView2 预发布 SDK 没有任何特定于打印功能的内容。
(更新 2023-06-02:基于此答案链接到 WebView2 打印文档。此外,许多 API 不再是实验性的(
(更新 2022-11-30:自从我上次在这里回复以来,我们添加了我在下面描述的其他打印方法(
有几种不同的打印方式,为您提供不同程度的易用性和控制:
- CoreWebView2.ShowPrintUI:在 WebView2 中显示当前顶级文档的 WebView2 打印预览对话框或操作系统打印对话框。使用此机制,您可以轻松获得用户熟悉的打印体验。最终用户通过打印对话框选择打印设置。(此方法稳定,在 v1.0.1518.46 起的 SDK 中可用(。
webview2.CoreWebView2.ShowPrintUI();
- CoreWebView2.PrintAsync:使用可选的编程方式指定的打印设置以静默方式打印 WebView2 中的当前顶级文档。如果要生成自己的打印预览对话框或以其他方式构建自己的打印体验,可以使用此方法。(此方法稳定,自 v1.0.1518.46 起在发布 SDK 中可用(。
// null for default print settings.
await webview2.CoreWebView.PrintAsync(null);
- CoreWebView2.PrintToPdfAsync/PrintToPdfStreamAsync:以静默方式将 WebView2 中的当前顶级文档打印为 PDF 文件或 PDF 流。要完全控制打印的执行方式,您可以打印到 PDF,然后构建自己的代码来打印 PDF。(该方法的流版本稳定,自 v1.0.1518.46 起在发布 SDK 中可用(。
// null for default print settings.
var stream = await webview.CoreWebView2.PrintToPdfStreamAsync(null);
- 脚本注入:如果必须支持早于上述 API 的 WebView2 运行时,作为 HTML 文档的解决方法,可以注入调用 DOM 打印方法的脚本。这有一个限制,即它仅适用于 HTML 文档(例如 PDF(,并且仅在文档中启用脚本时。例如,如果在以下 webview2 中是 WPF WebView2 类:
await webview2.CoreWebView2.ExecuteScriptAsync("window.print();");
有关更多详细信息,请参阅 WebView2 打印文档。
另请参阅旧的打印功能请求 GitHub 线程。
WebView2 支持打印到 PDF 并带有PrintToPdfAsync(path, settings)
:
await webView2.CoreWebView2.PrintToPdfAsync(@"Path/To/File.pdf");
我能够通过向重点 WebView2 发送打印快捷键来实现 Windows 窗体应用程序中的打印。我正在使用 SendKeys 类,不幸的是它在 WPF 中不可用,但这里似乎提到了一种解决方法。
弄清楚该部分后,它就像
:this.webView1.Focus();
SendKeys.Send("^p");
它运行良好,在 WebView2 中显示预览和设置。