启动时以pdf格式启动javascript(使用hyperref生成)

xdyibdwo  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(287)

我有一个带有只读计算文本字段的pdf表单。此pdf是使用hyperref包从latex代码生成的。
为了说明我的问题,让我们使用这个mwe(来自pdftex和javascript表单的自动计算问题):
结果

乳胶

\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}

我的问题是,在启动时,没有计算伽马值(在我们的例子中为9)。我必须更改表单中的任何字段,以便更新所有javascript。
是否有一种方法可以让所有javascript在启动文件时执行,而不仅仅是在修改文件时执行?

gv8xihay

gv8xihay1#

解决方案

打开文件时,默认情况下不会执行pdf中的javascript脚本。
但是,adobe acrobat允许我们在pdf中定义事件和操作(e、 g.打开文件,播放声音,转到页面)。也可以在事件发生时执行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}

相关问题