我有一个PDF文件,我正在尝试通过Javascript打印它。我尝试过这个嵌入技巧:Silent print a embedded PDF。然而,打印功能从来没有变得可用,它始终是未定义的。
我已经用下面的代码尝试过Iframe技巧:
function printPDF() {
if(document.getElementById("pdfDocument").contentWindow.document.readyState === "complete") {
document.getElementById("pdfDocument").focus();
document.getElementById("pdfDocument").contentWindow.print();
} else {
setInterval(printPDF(), 1000);
}
}(pdfDocument是iframe的ID )这确实会弹出打印对话框,但会打印一个空白页。我喜欢embed标签的工作方式。但是为什么打印功能始终不可用呢?
大多数关于这个主题的帖子都很老了。最好的HTML5/jQuery方式是什么?(或者在这一点上只是普通的JS )
编辑:
下面是embed标签的JS代码:
function printPDF() {
alert(document.getElementById("pdfDocument").print);
//Wait until PDF is ready to print
if (typeof document.getElementById("pdfDocument").print == 'undefined') {
setTimeout(function(){printPDF();}, 1000);
} else {
var x = document.getElementById("pdfDocument");
x.print();
}
}这每秒都在改变“未定义的”。打印选项永远不可用。有什么想法吗?
发布于 2014-11-21 03:14:21
我在大约一周前对这个问题进行了悬赏,但它已经过期了。我将在经过大量研究后将我在这里学到的东西发布给未来可能发现这一点的任何人。
PDF的显示因浏览器、浏览器版本、浏览器配置和操作系统而异。有很多变量,所以我将在这里讨论最常见的情况。
在所有浏览器上,我无法通过Javascript调用任何类型的()方法,我只能使用PdfActions。操作会调用print。
我的PDF是由我控制的服务器生成的,所以我最终在服务器上进行了服务更改,并添加了get PNG服务,该服务基于PDF生成所使用的相同标记生成PNG。浏览器处理图像比PDF要好得多,我知道这一点,但我希望我能重用PDF生成服务,因为它在我的代码中的其他地方使用。
它没有回答问题,但这是我所有的信息。我对将来可能发现这一点的任何人的建议是:在这种情况下,如果可能的话,抛弃PDF,变得更简单。否则,如果您知道如何在OSX的FF预览pdf查看器中通过Javascript调用print(),请更新此问题。
-Phil
发布于 2014-11-18 15:27:59
使用Javascript,我不确定我们是否能做到这一点。但是,可以使用脚本注入到pdf文件中来实现。如果我的理解是正确的,这就是谷歌所做的。
例如。
我们可以使用iTextSharp来模拟上述行为。
发布于 2014-11-19 05:26:38
有一种方法可以在浏览器中呈现整个pdf (而不是嵌入外部应用程序),这使您可以完全访问与pdf相关的浏览器API。
这是Mozilla在JavaScript中的实现:https://github.com/mozilla/pdf.js/
这是一个示例:http://mozilla.github.io/pdf.js/web/viewer.html (请注意右上角的print按钮)。
有关其工作原理的详细信息,请查看此处的查看器代码:https://github.com/mozilla/pdf.js/blob/master/web/viewer.js
从不利的方面来看,这将比仅仅嵌入要难得多。
从好的方面来说,它实际上是可行的。
https://stackoverflow.com/questions/18835648
复制相似问题