我知道如何在新窗口中打开网页并添加javascript,以便弹出打印对话框.有没有办法用PDF文件做类似的事情?
是的你可以...
PDF有Javascript支持.当创建PHP生成的PDF并且我能够使用FPDF使其工作时,我需要具有自动打印功能:
http://www.fpdf.org/en/script/script36.php
我通常使用一种类似于如何使用JavaScript打印PDF(eHow.com)的方法iframe
.
function printTrigger(elementId) { var getMyFrame = document.getElementById(elementId); getMyFrame.focus(); getMyFrame.contentWindow.print(); }
(在onClick
上a
或button
或input
任何你想或)
奖金创意#1 - 创建iframe
并将其添加到您的页面中,printTrigger();
以便在用户单击"打印"按钮之前不加载PDF,然后javascript可以攻击!iframe并触发打印对话框.
奖金创意#2 - 如果您禁用"打印"按钮并在用户点击后向用户提供一些加载微调器或其他内容,则会获得额外的功劳,这样他们就可以知道正在处理的内容而不是反复点击它!
刚知道如何在PDF本身内执行此操作 - 如果您有acrobat pro,请转到页面选项卡,右键单击第一页的缩略图,然后单击页面属性.单击窗口顶部的操作选项卡,然后在选择触发器下选择打开页面.在选择操作下选择"运行javascript".然后在javascript窗口中输入以下内容:
this.print({bUI: false, bSilent: true, bShrinkToFit: true});
这将打印您的文档,而无需与计算机上的默认打印机对话.如果需要打印对话框,只需将bUI更改为true,将bSilent更改为false,并可选择删除缩小以适合参数.
自动打印PDF!
我使用named action
而不是javascript,因为javascript经常被禁用,如果不是,它会发出警告.
我的Web应用程序创建一个postscript文件,然后使用ghostscript转换为pdf.我希望它自动打印,因为用户已经在我的应用程序中点击了打印.通过上面有关@DSimon命名操作的信息,我研究了如何解决这个问题.这一切都归结为将字符串插入/Type /Action /S /Named /N /Print
pdf中的正确位置.
我正在考虑编写一个小实用程序,但它必须解析pdf以找到根节点,插入/OpenAction
带有操作的引用对象,并重新计算外部参照中的字节偏移量.
但后来我发现了pdfmark这是postscript的扩展,用于在postscript语法中表达由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将创建动作,链接它,并计算外部参照偏移.(在postscript中%
是注释,PrintAction
是我对象的名称)
通过查看PDF,我发现它创建了这个:
1 0 obj <> endobj 9 0 obj <>endobj
1 0
对象1,修订版0,并且9 0
是对象9,修订版0.在pdf-trailer中表示它是作为根节点的对象1.如您所见,对象1有一个引用,/OpenAction
用于运行对象9的修订版0.
使用ghostscript可以将pdf转换为postscript(pdf2ps),附加上面的文本,然后将其转换回pdf ps2pdf
.应该注意的是,关于pdf的元信息在此转换中丢失.我没有更多地搜索这个.
嵌入代码示例:
可能不得不愚弄ids /名字.使用adobe reader ......