从javascript嵌入标签打印Pdf

mma*_*ran 13 javascript pdf html5

我有一个PDF文件,我试图通过Javascript打印它.我试过这个嵌入技巧:无声打印嵌入式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);
}
}
Run Code Online (Sandbox Code Playgroud)

(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();
 }
}
Run Code Online (Sandbox Code Playgroud)

这每秒都会改变"未定义"."打印"选项永远不可用.有任何想法吗?

phi*_*han 13

我大约一周前对这些问题给予了赏金,它已经过期了.在经过大量研究之后,我将发布我在这里学到的东西.

PDF的显示方式因浏览器,浏览器版本,浏览器配置和操作系统而异.有很多变量,所以我将在这里讨论最常见的情况.

  • 在所有浏览器上,我无法通过Javascript调用任何类型的print()方法,我只能使用PdfActions.OPENACTION会打印出来.我使用iText将这些嵌入到PDF中.

  • Chrome使用Adobe的查看器,该查看器不允许访问任何类型的print()方法,但会执行PDF中嵌入的PdfActions.因此,您可以在PDF中嵌入"OpenAction",并在从查看这些操作的任何应用程序打开时打印PDF调用.

  • Firefox(在特定版本之上,尽管所有最新版本)都使用Windows中的Adobe查看器,它也识别PdfActions.但是,在OSX中,它失去了对Adobe查看器的支持,并切换到Firefox查看器中的烘焙(pdf.js).哪个不支持PdfActions.

  • IE:我对IE没有太多考试.主要是因为在Firefox无法在OSX上运行之后,我放弃了从Javascript打印PDF(对我来说是一个要求).

我的PDF是由我控制的服务器生成的,因此我最终在服务器中进行了服务更改,并添加了一个获取PNG服务,该服务基于PDF生成使用的相同标记生成PNG.浏览器处理图像比我知道的PDF更好,但希望我能够重复使用PDF生成服务,因为它在我的代码中的其他地方使用.

它没有回答这个问题,但它是我所拥有的所有信息.我建议任何可能在将来发现这一点的人:如果可能的话,在这种情况下放弃PDF并简化.否则,如果您知道如何在OSX中的FF预览pdf查看器中通过Javascript调用print(),请更新此问题.

-Phil


Ram*_*are 2

对于 Javascript,我不确定我们是否可以做到这一点。但是可以使用脚本注入 pdf 文件来实现。如果我的理解是正确的,这就是谷歌所做的。

例如。

  1. 打开网址: https: //drive.google.com/viewerng/viewer? url=http://www.energy.umich.edu/sites/default/files/pdf-sample.pdf
  2. 现在单击打印图标。
  3. 如您所见,打开了一个新窗口,其中包含注入 pdf 的打印命令。一旦 pdf 加载,内置的打印命令就会被触发。每当刷新页面时,您都可以看到触发的打印。这意味着打印行为附加到文档加载事件。

我们可以使用 iTextSharp 来模拟上述行为。