我有一个PDF格式和一个只读计算的TextField。此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的方法,而不仅仅是在文件被修改时执行?
发布于 2021-07-10 22:23:09
解决方案
打开文件时,默认情况下不执行PDF中的JavaScript脚本。
但是,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();) >>
>>}米维
\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}https://stackoverflow.com/questions/68319356
复制相似问题