我使用 named action 而不是 javascript,因为 javascript 经常被禁用,如果不是,它会发出警告。
我的 Web 应用程序创建了一个 postscript 文件,然后使用 ghostscript 将其转换为 pdf。我希望它自动打印,因为用户已经在我的应用程序中单击了打印。通过上面@DSimon 中有关命名操作的信息,我研究了如何解决这个问题。这一切都归结为在 pdf 的正确位置插入字符串 /Type /Action /S /Named /N /Print。
我正在考虑编写一个小实用程序,但它必须解析 pdf 以找到根节点,插入带有引用的 /OpenAction 带有操作的对象,并重新计算外部参照中的字节偏移量。
但后来我发现 pdfmark 是 postscript 的一个扩展,用于以 postscript 语法表达由 Adobe 蒸馏器或 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),附加上面的文本,然后使用 ps2pdf 将其转换回 pdf。应该注意的是,有关 pdf 的元信息在此转换中丢失了。我没有对此进行更多搜索。