【发布时间】:2015-11-23 16:18:54
【问题描述】:
我正在尝试从网页打印动态生成的 PDF。
var $iframe = $('<iframe>');
$iframe.appendTo('body');
$iframe.load(function() {
var iframe = $iframe[0];
var result = iframe.contentWindow.document.execCommand("print", false, null);
if (!result) iframe.contentWindow.print();
$.remove($iframe);
});
$iframe.attr('src', dataUrl);
execCommand() 给出错误信息:
Uncaught SecurityError: Blocked a frame with origin “http://localhost:2520”访问原点为“null”的框架。 请求访问的帧具有“http”协议,该帧是 访问具有“数据”协议。协议必须匹配。
另外,设置 src attr 会给出警告:
资源解释为文档,但使用 MIME 类型应用程序/pdf 传输:
dataUrl 如下所示:
data:application/pdf;base64,JVBERi0xLjQKJdP...
编辑:@Mike C
我可以创建 iframe 并显示 pdf,但是当我打印时,它是空白的。
<style type="text/css" media="print">
body * { display:none }
iframe#theframe { display:block }
</style>
var $iframe = $('<iframe id="theframe" src="'+dataUrl+'"></iframe>');
$iframe.appendTo('body');
$iframe.load(function() {
setTimeout(function() {
window.print();
}, 1000);
});
【问题讨论】:
-
我不需要获取内容,已经有内容了!我只需要打印。
-
显示PDF而不是打印对用户来说不是更舒服吗?也许出于某种原因,他们宁愿保存 PDF 甚至制作屏幕截图。我不认为打印 PDF 按钮会很方便。
-
@PaulBrown "尝试从网页打印动态生成的 PDF。" 可以在问题中包含返回
data URI的js? -
它对服务器进行 ajax 调用以获取数据 URI。
标签: javascript jquery pdf iframe