【发布时间】:2017-03-21 01:06:49
【问题描述】:
我已经环顾 stackoverflow 一段时间,试图找到一种方法来做到这一点,但找不到合适的答案。我需要能够通过 base64 编码的字符串在新窗口或 iframe 中加载 PDF,并在加载后立即触发它的打印预览。我可以使用这两种方法轻松加载 PDF,但实际上无法正确显示打印预览。这是我尝试过的:
- 在新窗口中使用
embed元素。调用window.print()是空白的,即使在内容加载之后也是如此。 - 使用隐藏的、动态创建的
iframe和src="data:application/pdf;base64,JVBERi0..."并调用myFrame.contentWindow.print()。但这会产生 CORS 错误。我不知道为什么,因为我没有通过 iframe 加载新域,只是内容。 - 打开一个新窗口,其中只有一个
iframe元素,如#2 中的元素,并在整个窗口上调用打印。这也显示了一个空白的白页。 - 使用数据 uri 打开一个新窗口并打印它。
window.open('data:application/pdf;base64,JVBERi0...').print();。这也不起作用,因为它甚至根本不显示打印预览。我也尝试过使用setTimeout延迟它,但这也无济于事。
此时我很困惑为什么这些都不起作用,特别是因为在 Chrome 中它显示的自定义菜单栏是这样的:
如果我点击那里的实际打印图标,打印预览是完美的。当我单击该按钮时,无论 Chrome 正在做什么,这正是我想要完成的。反正有触发该功能吗?还是有另一种方法来完成我想要的?澄清一下,我只需要它在 Chrome 中工作,我不需要担心其他浏览器。
【问题讨论】:
-
你设法让它工作了吗?我尝试了同样的方法似乎没有任何效果
-
@db306 不,我真的不认为这是可能的,我已经尝试了我能想到的一切。 Chrome 中的 PDF 查看器实际上是一个插件,我认为不可能通过 javascript 与之交互。我认为使用 PDF.js 可能可以实现这一点,但我还没有时间尝试实现它
-
我实际上设法让它在弹出窗口上打印,但是,该函数会很快被触发,并且鉴于每个浏览器,我无法在 pdf 格式化程序上添加事件侦听器有不同的读者。我可以让它工作的唯一方法是将 pdf 文件保存在服务器上,在隐藏的 iframe 上提供 pdf 并在 iframe 加载后打印。希望这对某人有所帮助。谢谢
-
这适用于使用 iframe 的 chrome,但我在使用 Safari 时遇到问题,它会在 PDF 呈现之前尝试打印,并且 onload 不起作用
标签: javascript html pdf iframe