Ghostscript是否支持将JavaScript插入现有PDF?

Ghostscript是否支持将JavaScript插入现有PDF?,javascript,pdf,ghostscript,postscript,Javascript,Pdf,Ghostscript,Postscript,我在文档中未找到任何相关内容: 我确实找到了一个在每一页上插入水印的相关例子,所以这似乎是可能的 但是,从该示例中不清楚如何插入Javascript。Ghostscript的pdfwrite设备支持许多PostScript pdfmark操作(但不是全部)。不,没有支持哪一个的文档,但广义上说,除了逻辑结构的文档之外,其他的都支持 pdfmark参考(可从Adobe网站的某处获得…)描述了pdfmark语法,结合PDF参考手册(或ISO规范),我们可以看到JavaScript仅限于小部件注释。

我在文档中未找到任何相关内容:

我确实找到了一个在每一页上插入水印的相关例子,所以这似乎是可能的


但是,从该示例中不清楚如何插入Javascript。

Ghostscript的pdfwrite设备支持许多PostScript pdfmark操作(但不是全部)。不,没有支持哪一个的文档,但广义上说,除了逻辑结构的文档之外,其他的都支持

pdfmark参考(可从Adobe网站的某处获得…)描述了pdfmark语法,结合PDF参考手册(或ISO规范),我们可以看到JavaScript仅限于小部件注释。pdfmark引用中甚至有en示例,所以我做了一些显而易见的事情,并尝试了一下。下面的代码执行“something”。我假定它是正确的,但无法确定(也就是说,PDF内容是正确的;我不知道JavaScript):

[
/子类型/小部件
/Rect[216 647 361 684]
/F 4
/T(SL文本)
/英尺/英尺
/DA(/Helv 14 Tf 0 1 rg)
/五(5)
/AA
/F>
>>/ANN pdfmark
展示页
它绘制了一个浅蓝色的矩形,当你将鼠标移到它上面绘制了一个黑色边框,当你点击它时,它会显示值5。用数字值替换5,然后按回车键,它在蓝色背景上变成$value.00。看起来不错

请注意,上面链接的示例对您没有帮助,这与纯PostScript有关。要添加这样的注释,您需要:

  • 正在使用Ghostscript pdfwrite设备
  • 创建一个命令行,首先在其中处理现有PDF文件
  • 处理现有PDF文件后,在命令行上执行PostScript(使用pdfmark,如上所述,但显示页面,仅使用pdfmark部分)来定义注释。您需要使用-c(引入PostScript)和-f(结束PostScript)开关来执行此操作

  • Ghostscript的pdfwrite设备支持许多PostScript pdfmark操作(但不是全部)。不,没有支持哪些操作的文档,但从广义上讲,除了逻辑结构操作之外,其他操作都支持

    pdfmark参考(可从Adobe网站的某处获得…)描述了pdfmark语法,并与PDF参考手册(或ISO规范)结合使用我们可以看到JavaScript仅限于小部件注释。pdfmark参考中甚至有en示例,所以我做了显而易见的事情,并尝试了它。下面的代码做了一些事情。我假设它是正确的,但无法确定(也就是说,PDF内容是正确的;我不知道JavaScript):

    [
    /子类型/小部件
    /Rect[216 647 361 684]
    /F 4
    /T(SL文本)
    /英尺/英尺
    /DA(/Helv 14 Tf 0 1 rg)
    /五(5)
    /AA
    /F>
    >>/ANN pdfmark
    展示页
    
    它绘制了一个浅蓝色的矩形,当你将鼠标移到它上面绘制了一个黑色边框,当你点击它时,它会显示值5。用数字值替换5,然后按回车键,它在蓝色背景上变成$value.00。看起来不错

    请注意,上面链接的示例对您没有帮助,这与纯PostScript有关。要添加这样的注释,您需要:

  • 正在使用Ghostscript pdfwrite设备
  • 创建一个命令行,首先在其中处理现有PDF文件
  • 处理现有PDF文件后,在命令行上执行PostScript(使用pdfmark,如上所述,但显示页面,仅使用pdfmark部分)来定义注释。您需要使用-c(引入PostScript)和-f(结束PostScript)开关来执行此操作

  • 如果您想在文档加载时执行JavaScript,可以这样做(多亏了这个)

    [/_objdef{MyAlert}/type/dict/OBJ pdfmark
    [{MyAlert}>>
    /打上PDF标记
    [{Catalog}>/PUT pdfmark
    
    复制的完整步骤将是:

  • 确保您的计算机上安装了Ghostscript(使用
    gs
    命令)
  • 将源PDF放在包含上述代码的postscript(
    .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”)
    • 您可以设置一个用于帮助JS调试的
    资源:


    如果您想在文档加载时执行JavaScript,可以这样做(多亏了这个)

    [/_objdef{MyAlert}/type/dict/OBJ pdfmark
    [{MyAlert}>>
    /打上PDF标记
    [{Catalog}>/PUT pdfmark
    
    复制的完整步骤将是:

  • 确保您的计算机上安装了Ghostscript(使用
    gs
    命令)
  • 将源PDF放在包含上述代码的postscript(
    .ps
    )文件旁边的文件夹中
  • cd
    放入该文件夹
  • 运行:
    gs-dNOPAUSE-dBATCH-sDEVICE=pdfwrite-sOutputFile=newpdf.pdf myps.ps mypdf.pdf
    (显然用实际文件名替换
    myps.ps
    mypdf.pdf
  • 打开
    newpdf.pdf
    以验证它是否有效
  • 其他提示:

    • Acrobat不使用精确的
      [
      /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
      
      [ /_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