Ghostscript 是否支持在现有 PDF 中插入 JavaScript?
Does Ghostscript support inserting JavaScript into an existing PDF?
我在文档中找不到任何相关内容:https://www.ghostscript.com/doc/current/Use.htm
我确实找到了一个在每个页面上插入水印的相关示例,所以它似乎是可能的。
Is it possible in Ghostscript to add watermark to every page in PDF
但是,从该示例中不清楚如何插入 Javascript。
Ghostscript 的 pdfwrite 设备支持许多 PostScript pdfmark 操作(但不是全部)。不,没有关于哪些支持的文档,但从广义上讲,除了逻辑结构之外的所有内容。
pdfmark 参考(可从 Adobe 网站的某处获得......)描述了 pdfmark 语法,结合 PDF 参考手册(或 ISO 规范)我们可以看到 JavaScript仅限于小部件注释。 pdfmark 参考中甚至有一个例子,所以我做了显而易见的事情,并尝试了它。以下代码执行 'something'。我认为它是正确的,但无法确定(也就是说,PDF 内容是正确的;我不知道 JavaScript):
[
/Subtype /Widget
/Rect [216 647 361 684]
/F 4
/T (SL Text)
/FT /Tx
/DA (/Helv 14 Tf 0 0 1 rg)
/V (5)
/AA <<
/K <<
/S /JavaScript
/JS (AFNumber_Keystroke\(2, 0, 0, 0, "$", true\);)
>>
/F <<
/S /JavaScript
/JS (AFNumber_Format\(2, 0, 0, 0, "$", true\);)
>>
>> /ANN pdfmark
showpage
画了一个淡蓝色的矩形,当鼠标悬停在它上面画了一个黑色的边框,当你点击它的时候,它显示值5。将5换成一个数值,然后按return就变成了蓝色背景上的 $value.00。 看起来不错。
请注意,上面链接的示例对您没有帮助,因为它与纯 PostScript 有关。为了添加这样的注释,您需要:
- 正在使用 Ghostscript pdfwrite 设备
- 创建您首先处理现有 PDF 文件的命令行
- 在命令行 处理现有 PDF 文件后,执行 PostScript(使用 pdfmark,如上所述,但 不是 显示页面,只是 pdfmark 部分)来定义注释。您将需要使用 -c(引入 PostScript)和 -f(结束 PostScript)开关来执行此操作。
如果你想在文档加载时执行 JavaScript 你可以这样做(感谢这个 useful PDF primer)。
[ /_objdef {MyAlert} /type /dict /OBJ pdfmark
[ {MyAlert} << /JavaScript << /Names [ (MyAlertCode) << /S /JavaScript
/JS (app.alert\("Hello world 1."\);app.alert\("Hello world 2."\);) >> ]
>> >>
/PUT pdfmark
[ {Catalog} << /Names {MyAlert} >> /PUT pdfmark
复制的完整步骤为:
- 确保您的计算机上安装了 Ghostscript(
gs
命令)
- 将您的源 PDF 放在包含上述代码的后记 (
.ps
) 文件旁边的文件夹中。
cd
到那个文件夹
- 运行:
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=newpdf.pdf myps.ps mypdf.pdf
(显然用您的实际文件名替换 myps.ps
和 mypdf.pdf
)。
- 打开
newpdf.pdf
验证它是否有效!
其他提示:
- Acrobat 使用的语法与您在传统 Web 开发中可能使用的语法并不完全相同(因此示例中的
app.alert
而不是传统的 alert()
。)不要只是假设您尝试使用的函数存在。
- 您需要使用反斜杠来转义 JavaScript 中的括号(例如
app.alert\("Hello World"\)
- 你可以设置一个Javascript console on Acrobat来帮助JS调试
资源:
我在文档中找不到任何相关内容:https://www.ghostscript.com/doc/current/Use.htm
我确实找到了一个在每个页面上插入水印的相关示例,所以它似乎是可能的。
Is it possible in Ghostscript to add watermark to every page in PDF
但是,从该示例中不清楚如何插入 Javascript。
Ghostscript 的 pdfwrite 设备支持许多 PostScript pdfmark 操作(但不是全部)。不,没有关于哪些支持的文档,但从广义上讲,除了逻辑结构之外的所有内容。
pdfmark 参考(可从 Adobe 网站的某处获得......)描述了 pdfmark 语法,结合 PDF 参考手册(或 ISO 规范)我们可以看到 JavaScript仅限于小部件注释。 pdfmark 参考中甚至有一个例子,所以我做了显而易见的事情,并尝试了它。以下代码执行 'something'。我认为它是正确的,但无法确定(也就是说,PDF 内容是正确的;我不知道 JavaScript):
[
/Subtype /Widget
/Rect [216 647 361 684]
/F 4
/T (SL Text)
/FT /Tx
/DA (/Helv 14 Tf 0 0 1 rg)
/V (5)
/AA <<
/K <<
/S /JavaScript
/JS (AFNumber_Keystroke\(2, 0, 0, 0, "$", true\);)
>>
/F <<
/S /JavaScript
/JS (AFNumber_Format\(2, 0, 0, 0, "$", true\);)
>>
>> /ANN pdfmark
showpage
画了一个淡蓝色的矩形,当鼠标悬停在它上面画了一个黑色的边框,当你点击它的时候,它显示值5。将5换成一个数值,然后按return就变成了蓝色背景上的 $value.00。 看起来不错。
请注意,上面链接的示例对您没有帮助,因为它与纯 PostScript 有关。为了添加这样的注释,您需要:
- 正在使用 Ghostscript pdfwrite 设备
- 创建您首先处理现有 PDF 文件的命令行
- 在命令行 处理现有 PDF 文件后,执行 PostScript(使用 pdfmark,如上所述,但 不是 显示页面,只是 pdfmark 部分)来定义注释。您将需要使用 -c(引入 PostScript)和 -f(结束 PostScript)开关来执行此操作。
如果你想在文档加载时执行 JavaScript 你可以这样做(感谢这个 useful PDF primer)。
[ /_objdef {MyAlert} /type /dict /OBJ pdfmark
[ {MyAlert} << /JavaScript << /Names [ (MyAlertCode) << /S /JavaScript
/JS (app.alert\("Hello world 1."\);app.alert\("Hello world 2."\);) >> ]
>> >>
/PUT pdfmark
[ {Catalog} << /Names {MyAlert} >> /PUT pdfmark
复制的完整步骤为:
- 确保您的计算机上安装了 Ghostscript(
gs
命令) - 将您的源 PDF 放在包含上述代码的后记 (
.ps
) 文件旁边的文件夹中。 cd
到那个文件夹- 运行:
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=newpdf.pdf myps.ps mypdf.pdf
(显然用您的实际文件名替换myps.ps
和mypdf.pdf
)。 - 打开
newpdf.pdf
验证它是否有效!
其他提示:
- Acrobat 使用的语法与您在传统 Web 开发中可能使用的语法并不完全相同(因此示例中的
app.alert
而不是传统的alert()
。)不要只是假设您尝试使用的函数存在。 - 您需要使用反斜杠来转义 JavaScript 中的括号(例如
app.alert\("Hello World"\)
- 你可以设置一个Javascript console on Acrobat来帮助JS调试
资源: