我知道如何在新窗口中打开网页并添加javascript,以便弹出打印对话框。有没有办法用PDF文件做类似的事情?
答案 0 :(得分:33)
是的,你可以......
PDF有Javascript支持。创建PHP生成的PDF并且我能够使用FPDF使其工作时,我需要具有自动打印功能:
答案 1 :(得分:30)
我通常使用iframe
执行与How to Use JavaScript to Print a PDF (eHow.com)给出的方法类似的操作。
function printTrigger(elementId) {
var getMyFrame = document.getElementById(elementId);
getMyFrame.focus();
getMyFrame.contentWindow.print();
}
(onClick
或a
或button
上的input
或您想要的任何内容
<input type="button" value="Print" onclick="printTrigger('iFramePdf');" />
<iframe id="iFramePdf" src="myPdfUrl.pdf" style="display:none;"></iframe>
奖金创意#1 - 创建iframe
并将其添加到printTrigger();
内的页面中,以便在用户点击“打印”之前不会加载PDF “按钮,然后javascript可以攻击! iframe并触发打印对话框。
奖金创意#2 - 如果您停用“打印”按钮并在用户点击后向用户提供一些加载微调器或其他内容,则会获得额外的功劳,这样他们就可以知道正在处理的内容而非点击它反复!
答案 2 :(得分:13)
刚刚想出如何在PDF本身中执行此操作 - 如果您有acrobat pro,请转到页面选项卡,右键单击第一页的缩略图,然后单击页面属性。单击窗口顶部的操作选项卡,然后在选择触发器下选择打开页面。在选择操作下选择“运行javascript”。然后在javascript窗口中输入:
this.print({bUI: false, bSilent: true, bShrinkToFit: true});
这将打印您的文档而无需与计算机上的默认打印机对话。如果需要打印对话框,只需将bUI更改为true,将bSilent更改为false,并可选择删除缩小以适合参数。
自动打印PDF!
答案 3 :(得分:9)
我使用named action
代替javascript,因为javascript经常被禁用,如果不是,则会发出警告。
我的Web应用程序创建一个postscript文件,然后使用ghostscript转换为pdf。我希望它自动打印,因为用户已经在我的应用程序中点击了打印。通过上面有关@DSimon命名操作的信息,我研究了如何解决这个问题。这一切都归结为将字符串/Type /Action /S /Named /N /Print
插入pdf中的正确位置。
我正在考虑编写一个小实用程序,但它必须解析pdf以找到根节点,插入带有操作的对象的引用/OpenAction
,并重新计算外部参照中的字节偏移量。 / p>
然后我发现了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
<</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的元信息在此转换中丢失。我没有仔细研究过这个。
答案 4 :(得分:7)
嵌入代码示例:
<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>
可能不得不愚弄ids /名字。 使用adobe reader ...
答案 5 :(得分:4)
如果您知道PDF文件的结构(或者愿意花一点时间阅读规范),您可以这样做。
在Catalog对象的OpenAction字段中使用命名操作“Print”; “打印”操作没有记录,但Acrobat Reader和大多数其他主要读者都了解它。这种方法的一个很好的好处是你没有得到任何JavaScript警告。有关详细信息,请参阅此处:http://www.gnostice.com/nl_article.asp?id=157
为了使它更加闪亮,我添加了第二个Action,URI,指示读者返回发起请求的页面。然后我使用Next字段将此Action附加到第一个Named操作。将内容处置设置为“内联”时,这使得当用户单击打印链接时:
我只使用File和IO模块就可以轻松地在Ruby中完成所有这些更改;我打开了使用外部工具生成的PDF,然后将外部参照跟踪到现有的Catalog部分,然后使用包含我的特殊OpenAction行的更新Catalog对象以及新的Action对象将新部分附加到PDF上。
由于PDF的增量修订功能,您无需对现有数据进行任何更改即可,只需在末尾附加一个部分。
答案 6 :(得分:3)
为什么不使用“操作”菜单选项来设置它?
执行以下操作:如果您有Acrobat Pro,请转到页面选项卡,右键单击第一页的缩略图,然后单击页面属性。单击窗口顶部的操作选项卡,然后在选择触发器下选择打开页面。在选择操作下,选择'执行菜单项'。点击添加按钮,然后选择'文件&gt;打印'然后确定。再次单击“确定”并保存PDF。
答案 7 :(得分:2)
如果您使用Ruby on Rails的prawn gem生成PDF,则可以使用以下附加gem来激活打印对话框:
答案 8 :(得分:-1)
另一种解决方案:
index.html
答案 9 :(得分:-7)
如果您将pdf嵌入网页并引用对象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>
我希望有所帮助。