PDF文件的打印对话框是否可以用Javascript打开?
我知道如何打开一个新窗口中的网页,并添加JavaScript,所以打印对话框popup。 有没有办法用PDF文件做类似的事情?
是的你可以…
PDFs有Javascript支持。 我需要在创buildPHP生成的PDF时具有自动打印function,并且能够使用FPDF来实现它:
我通常使用iframe
使用JavaScript来打印PDF(eHow.com) 。
-
打印触发器的function
function printTrigger(elementId) { var getMyFrame = document.getElementById(elementId); getMyFrame.focus(); getMyFrame.contentWindow.print(); }
-
一个button,让用户访问…
(点击一个
button
或input
或任何你想要的)<input type="button" value="Print" onclick="printTrigger('iFramePdf');" />
-
指向您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设置为“内联”时,可以使用户点击打印链接时:
- 它在同一个选项卡中打开Adobe Reader并加载文件
- 它立即显示打印对话框
- 只要“打印”对话框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>
我希望有帮助。