问题描述
在我的 WPF 应用程序中,我有一个加载 html 字符串以显示给用户的窗口。然后有一个按钮让用户打开打印对话框并打印文档(使用 javascript 代码 window.print();)。
问题是:如果 html 文档包含嵌入的 pdf (
解决方法
这是一项安全功能,而不是错误。它也不限于 WebView2,而是适用于一般的 Chromium。
嵌入的 PDF 对象导致 HTML 文档变为 sandboxed。从而阻止 window.print()
照常执行。
这是由 HTML specification 指定的:
Document 文档的打印步骤是:
- ...
- 如果文档的活动沙盒标志集设置了沙盒模式标志,则返回。
这也是 Ctrl+P 仍然有效并显示打印对话框的原因,因为这是不受此安全问题影响的用户操作。
解决方法
在 WebView2“本地”支持打印之前,我目前能想到的最佳解决方法是将 PDF 加载到 iframe
中,从而将父文档从沙盒中释放出来:
<iframe src="data:application/pdf;base64,JVBERi0..."