【问题标题】:Lauch JavaScript in PDF Form at startup (generated with hyperref)在启动时以 PDF 形式启动 JavaScript(使用 hyperref 生成)
【发布时间】:2021-09-19 23:12:03
【问题描述】:

我有一个带有只读计算文本字段的 PDF 表单。此 PDF 是使用 hyperref 包从 Latex 代码生成的。

为了说明我的问题,让我们使用这个 MWE(来自pdftex and javascript forms with automatic calculations 问题):
结果

乳胶

\documentclass{article}
\usepackage{hyperref}[pdftex]

\begin{document}
\begin{Form}

\TextField[maxlen=40,align=2,height=10pt,width=45pt,name=alpha,default=5]{Alpha}

\bigskip
\TextField[maxlen=40,align=2,height=10pt,width=45pt,name=beta,default=4]{Beta}

\bigskip
\TextField[
  maxlen=40,
  calculate={%
    var f_alpha = this.getField("alpha");
    var f_beta = this.getField("beta");
    event.value = f_alpha.value + f_beta.value;
  },
   align=2,height=10pt,width=45pt,name=gamma,readonly=true]{Gamma}
\end{Form}
\end{document}

我的问题是在启动时,没有计算 Gamma 值(在我们的例子中是 9)。我必须更改表单中的任何字段才能更新所有 JavaScript。

有没有办法让所有的 javascript 在文件启动时执行,而不仅仅是在文件被修改时执行?

【问题讨论】:

标签: javascript forms pdf latex


【解决方案1】:

解决方案

打开文件时默认不执行 PDF 中的 JavaScript 脚本。
但是,Adobe Acrobat 允许我们在 PDF 中定义事件和动作。 (例如打开文件、播放声音、转到页面)。也可以在事件发生时执行 JavaScript 脚本。
文档的calculateNow()函数会重新计算文档中的所有字段。
但是,打开文件时不应执行此函数,因为未定义字段的创建顺序。可能在某些字段尚未创建时调用了calculateNow() 函数。
此脚本仅应在打开第一页时运行(而不是在打开文件时)。因此它已完成生成。

要在 LaTeX 中编写这个动作,你需要使用\pdfpageattr 命令:

\pdfpageattr{/AA << %additional actions for pages
    %on every page open event (/O), add a JavaScript action
    /O << /S/JavaScript /JS (this.calculateNow();) >>
  >>}
MWE
\documentclass{article}
\usepackage{hyperref}[pdftex]

\pdfpageattr{/AA << %additional actions for pages
    %on every page open event (/O), add a JavaScript action
    /O << /S/JavaScript /JS (this.calculateNow();) >>
  >>}

\begin{document}
\begin{Form}

  \TextField[maxlen=40,align=2,height=10pt,width=45pt,name=alpha,default=5]{Alpha}

  \bigskip
  \TextField[maxlen=40,align=2,height=10pt,width=45pt,name=beta,default=4]{Beta}

  \bigskip
  \TextField[
    maxlen=40,
    calculate={%
        var f_alpha = this.getField("alpha");
        var f_beta = this.getField("beta");
        event.value = f_alpha.value + f_beta.value;
      },
    align=2,height=10pt,width=45pt,name=gamma,readonly=true]{Gamma}
\end{Form}
\end{document}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2022-10-08
    • 2016-08-12
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多