我知道如何在新窗口中打开网页并添加 javascript 以便弹出打印对话框。有没有办法对PDF文件做类似的事情?
可以使用 Javascript 打开 PDF 文件的打印对话框吗?
是的你可以...
PDF 具有 Javascript 支持。创建 PHP 生成的 PDF 时,我需要具有自动打印功能,并且我能够使用 FPDF 使其工作:
我通常做一些类似于How to Use JavaScript to Print a PDF (eHow.com) 给出的方法,使用iframe
.
一个容纳打印触发器的函数......
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');" />
指向您的 PDF 的 iframe...
<iframe id="iFramePdf" src="myPdfUrl.pdf" style="display:none;"></iframe>
Bonus Idea #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 distiller 或 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 将创建动作、链接它并计算外部参照偏移。(附言中%
是评论,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),附加上面的文本,然后使用 .pdf 将其转换回 pdf ps2pdf
。应该注意的是,在此转换中丢失了有关 pdf 的元信息。我没有对此进行更多搜索。
嵌入代码示例:
<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/names 上鬼混。使用 adobe 阅读器...