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

问题描述

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

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

1 个答案:

答案 0 :(得分:2)

这是一项安全功能,而不是错误。它也不限于 WebView2,而是适用于一般的 Chromium。

嵌入的 PDF 对象导致 HTML 文档变为 sandboxed。从而阻止 window.print() 照常执行。

这是由 HTML specification 指定的:

Document 文档的打印步骤是:

  1. ...
  2. 如果文档的活动沙盒标志集设置了沙盒模式标志,则返回。

这也是 Ctrl+P 仍然有效并显示打印对话框的原因,因为这是不受此安全问题影响的用户操作。

解决方法

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

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

解决方法

这是一项安全功能,而不是错误。它也不限于 WebView2,而是适用于一般的 Chromium。

嵌入的 PDF 对象导致 HTML 文档变为 sandboxed。从而阻止 window.print() 照常执行。

这是由 HTML specification 指定的:

Document 文档的打印步骤是:

  1. ...
  2. 如果文档的活动沙盒标志集设置了沙盒模式标志,则返回。

这也是 Ctrl+P 仍然有效并显示打印对话框的原因,因为这是不受此安全问题影响的用户操作。

解决方法

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

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