PDF文件的打印对话框是否可以用Javascript打开?

我知道如何打开一个新窗口中的网页,并添加JavaScript,所以打印对话框popup。 有没有办法用PDF文件做类似的事情?

是的你可以…

PDFs有Javascript支持。 我需要在创buildPHP生成的PDF时具有自动打印function,并且能够使用FPDF来实现它:

http://www.fpdf.org/en/script/script36.php

我通常使用iframe 使用JavaScript来打印PDF(eHow.com) 。

  1. 打印触发器的function

     function printTrigger(elementId) { var getMyFrame = document.getElementById(elementId); getMyFrame.focus(); getMyFrame.contentWindow.print(); } 
  2. 一个button,让用户访问…

    (点击一个buttoninput或任何你想要的)

     <input type="button" value="Print" onclick="printTrigger('iFramePdf');" /> 
  3. 指向您PDF的iframe …

     <iframe id="iFramePdf" src="myPdfUrl.pdf" style="display:none;"></iframe> 

奖金想法#1 – 创buildiframe并将其添加到您的页面内的printTrigger(); 这样PDF就不会被加载,直到用户点击你的“打印”button,那么javascript就可以攻击! iframe并触发打印对话框。


奖金的想法#2 – 额外的功劳,如果你禁用“打印”button,并给用户一个点击后,加载微调或一些东西,使他们知道的东西正在处理,而不是反复点击它!

只是想出了如何在PDF本身内做到这一点 – 如果你有acrobat pro,去你的页面选项卡,右键单击第一页的缩略图,然后单击页面属性。 点击窗口顶部的操作选项卡,并在select触发器下select页面打开。 在select操作下select“运行JavaScript”。 然后在javascript窗口中input:

 this.print({bUI: false, bSilent: true, bShrinkToFit: true}); 

这将打印您的文件,而不会与您机器上的默认打印机进行对话。 如果您需要打印对话框,只需将bUI更改为true,将bSilent更改为false,并可以select删除缩小以适合参数。

自动打印PDF!

我使用named action而不是JavaScript,因为JavaScript通常被禁用,如果不是,它会给出警告。

我的web应用程序创build一个后记文件,然后用ghostscript转换为pdf。 我希望它自动打印,因为用户已经点击了我的应用程序内的打印。 从上面的@DSimon的命名行为的信息,我研究了如何解决这个问题。 这一切都归结为在PDF中的正确位置插入string/Type /Action /S /Named /N /Print

我正在考虑编写一个小实用程序,但是它必须parsingpdf才能find根节点,插入/OpenAction并引用带有操作的对象,然后重新计算外部参照中的字节偏移量。

但是后来我发现pdfmark是后记的扩展,用postscript的语法来expression由Adobes蒸馏器或ghostscript转换为pdf的成语。

由于我已经使用了ghostscript,所以我只需要将下面的内容附加到我的postscript文件的末尾:

 %AUTOPRINT [ /_objdef {PrintAction} /type /dict /OBJ pdfmark [ {PrintAction} << /Type /Action /S /Named /N /Print >> /PUT pdfmark [ {Catalog} << /OpenAction {PrintAction} >> /PUT pdfmark 

ghostscript将创build该动作,将其链接,并计算外部参照偏移量。 (在postscript %是一个评论, PrintAction是我的名字的对象)

通过查看PDF我看到它创造了这个:

 1 0 obj <</Type /Catalog /Pages 3 0 R /OpenAction 9 0 R /Metadata 10 0 R >> endobj 9 0 obj <</S/Named /Type/Action /N/Print>>endobj 

1 0是对象1,修订版0,而9 0是对象9,修订版0.在pdf-trailer中是说对象1是根节点。 正如你所看到的,有一个来自对象1的引用, /OpenAction来运行对象9修订版0。

使用ghostscript,可以将pdf转换为postscript(pdf2ps),追加上面的文本,然后使用ps2pdf将其转换回pdf。 应该指出的是,有关pdf的元信息在这个转换中丢失了。 我没有更多的search这个。

embedded代码示例:

 <object type="application/pdf" data="example.pdf" width="100%" height="100%" id="examplePDF" name="examplePDF"><param name='src' value='example.pdf'/></object> <script> examplePDF.printWithDialog(); </script> 

可能不得不与id /名称混在一起。 使用Adobe Reader …

如果你知道PDF文件是如何构build的(或者愿意花一点时间阅读规范),你可以这样做。

在Catalog对象的OpenAction字段中使用命名操作“Print” “打印”行动没有logging,但Acrobat Reader和其他主要读者都了解它。 这种方法的一个很好的好处是你没有得到任何JavaScript警告。 详情请看这里: http : //www.gnostice.com/nl_article.asp?id=157

为了让它更加炫目,我添加了第二个Action,URI,指导读者返回发起请求的页面。 然后我使用Next字段将该Action附加到第一个Named action。 将内容configuration设置为“内联”时,可以使用户点击打印链接时:

  1. 它在同一个选项卡中打开Adobe Reader并加载文件
  2. 它立即显示打印对话框
  3. 只要“打印”对话框closures(无论是“确定”还是“取消”),浏览器选项卡将返回到网页

我只能使用File和IO模块轻松地在Ruby中完成所有这些更改; 我打开了使用外部工具生成的PDF,按照现有的目录部分的外部参照,然后在PDF上添加了一个新的部分,其中包含特殊的OpenAction行以及新的Action对象。

由于PDF的增量修订function,您无需对现有数据进行任何更改即可完成此操作,只需在最后附加一个附加部分即可。

为什么不使用Actions菜单选项来设置?

请执行以下操作:如果您使用的是Acrobat Pro,请转到页面选项卡,右键单击第一页的缩略图,然后单击页面属性。 点击窗口顶部的操作选项卡,并在select触发器下select页面打开。 在select操作下,select“执行菜单项” 。 点击添加button,然后select“文件>打印”,然后确定。 再次单击确定并保存PDF。

如果您正在使用Ruby on Rails的对象创buildPDF,则可以使用以下附加gem来激活打印对话框:

对虾打印

另一个scheme

 <input type="button" value="Print" onclick="document.getElementById('PDFtoPrint').focus(); document.getElementById('PDFtoPrint').contentWindow.print();"> 

如果您将pdfembedded到您的网页中并引用对象ID,则应该可以这样做。

例如。 在你的HTML中:

 <object ID="examplePDF" type="application/pdf" data="example.pdf" width="500" height="500"> 

在你的javascript:

 <script> var pdf = document.getElementById("examplePDF"); pdf.print(); </script> 

我希望有帮助。