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

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

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

乳胶

  1. \documentclass{article}
  2. \usepackage{hyperref}[pdftex]
  3. \begin{document}
  4. \begin{Form}
  5. \TextField[maxlen=40,align=2,height=10pt,width=45pt,name=alpha,default=5]{Alpha}
  6. \bigskip
  7. \TextField[maxlen=40,align=2,height=10pt,width=45pt,name=beta,default=4]{Beta}
  8. \bigskip
  9. \TextField[
  10. maxlen=40,
  11. calculate={%
  12. var f_alpha = this.getField("alpha");
  13. var f_beta = this.getField("beta");
  14. event.value = f_alpha.value + f_beta.value;
  15. },
  16. align=2,height=10pt,width=45pt,name=gamma,readonly=true]{Gamma}
  17. \end{Form}
  18. \end{document}

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

gv8xihay

gv8xihay1#

解决方案

打开文件时,默认情况下不会执行pdf中的javascript脚本。
但是,adobe acrobat允许我们在pdf中定义事件和操作(e、 g.打开文件,播放声音,转到页面)。也可以在事件发生时执行javascript脚本。
这个 calculateNow() 单据的功能将重新计算单据中的所有字段。
但是,打开文件时不应执行此函数,因为未定义字段的创建顺序。有可能 calculateNow() 函数在某些字段尚未创建时调用。
此脚本应仅在打开第一页时运行(而不是在打开文件时)。因此,它已完成生成。
要使用latex编写此操作,需要使用 \pdfpageattr 命令:

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

mwe

  1. \documentclass{article}
  2. \usepackage{hyperref}[pdftex]
  3. \pdfpageattr{/AA << %additional actions for pages
  4. %on every page open event (/O), add a JavaScript action
  5. /O << /S/JavaScript /JS (this.calculateNow();) >>
  6. >>}
  7. \begin{document}
  8. \begin{Form}
  9. \TextField[maxlen=40,align=2,height=10pt,width=45pt,name=alpha,default=5]{Alpha}
  10. \bigskip
  11. \TextField[maxlen=40,align=2,height=10pt,width=45pt,name=beta,default=4]{Beta}
  12. \bigskip
  13. \TextField[
  14. maxlen=40,
  15. calculate={%
  16. var f_alpha = this.getField("alpha");
  17. var f_beta = this.getField("beta");
  18. event.value = f_alpha.value + f_beta.value;
  19. },
  20. align=2,height=10pt,width=45pt,name=gamma,readonly=true]{Gamma}
  21. \end{Form}
  22. \end{document}
展开查看全部

相关问题