首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动时采用PDF格式的Lauch JavaScript (用hyperref生成)

启动时采用PDF格式的Lauch JavaScript (用hyperref生成)
EN

Stack Overflow用户
提问于 2021-07-09 15:34:54
回答 1查看 150关注 0票数 2

我有一个PDF格式和一个只读计算的TextField。此PDF是使用hyperref包从Latex代码生成的。

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

结果

乳胶

代码语言: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}

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

是否有一种在文件启动时执行所有javascript的方法,而不仅仅是在文件被修改时执行?

EN

回答 1

Stack Overflow用户

发布于 2021-07-10 22:23:09

解决方案

打开文件时,默认情况下不执行PDF中的JavaScript脚本。

但是,Acrobat允许我们在PDF中定义事件和操作。(例如打开文件,播放声音,转到页面)。还可以在事件发生时执行JavaScript脚本。

文档的calculateNow()函数将重新计算文档中的所有字段。

但是,由于未定义字段的创建顺序,因此在打开文件时不应执行此函数。当尚未创建某些字段时,可能会调用calculateNow()函数。

只应在打开第一页时(而不是在打开文件时)运行此脚本。因此,它已经完成生成。

要在LaTeX中编写此操作,需要使用\pdfpageattr命令:

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

米维

代码语言:javascript
复制
\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}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68319356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档