WebView2 无法打印 html 嵌入了 pdf 数据的文档 (base64)

WebView2 can't print html document with embedded pdf data (base64)

在我的 WPF 应用程序中,我有一个 window 加载 html 字符串以显示给用户。然后有一个按钮让用户打开打印对话框并打印文档(使用 javascript 代码 window.print();)。

问题是:如果 html 文档包含嵌入的 pdf (

这是一项安全功能,不是错误。它也不限于 WebView2,但通常适用于 Chromium。

嵌入的 PDF 对象导致 HTML 文档成为 sandboxed。从而防止 window.print() 像往常一样执行。

这是由 HTML specification 指定的:

The printing steps for a Document document are:

  1. ...
  2. If the active sandboxing flag set of document has the sandboxed modals flag set, then return.

这也是为什么 Ctrl+P 仍然有效并调出打印对话框的原因,因为它是一个用户操作,不受这个安全问题。

解决方法

在 WebView2“本地”支持打印之前,我目前能想到的最佳解决方法是将 PDF 加载到 iframe 中,从而使父文档免于沙盒化:

<iframe src="data:application/pdf;base64,JVBERi0..."