insdljs
我正在尝试使用 JavaScript 在我的 PDF 文件中创建一些动态表单。我正在使用 xelatex 来编译它。包插入 JavaScript 的方式有些问题,导致它无法正常工作。
以下是示例文件:
\documentclass{article}
\usepackage[dvipdfm]{eforms}
\begin{insDLJS}{hello}{Hello, World}
var done=0;
function hello()
{
if (!done) {
// check if we are done
done=1;
app.alert("Hello, World!");
}
}
\end{insDLJS}
\OpenAction{/S /JavaScript /JS (hello();)}
\begin{document}
Hello,world!
\end{document}
如果你消除删除无用的注释并用 xelatex 编译,然后在 Acrobat Reader 中打开编译后的 PDF,您会收到“Hello, World!”警告。但是删除注释时不会收到任何警告。
查看插入 PDF 的实际 JavaScript(我认为你需要 Acrobat Pro 才能执行此操作),我发现所有换行符都被删除了。它变成
var done=0;function hello(){if (!done) {// check if we are done done=1;app.alert("Hello, World!");}}
在 JavaScript 中,双斜线//
表示该行的其余部分是注释。当删除所有换行符时,一半的代码将被忽略!Acrobat 的 JavaScript 控制台会给出与此一致的错误消息(它找不到函数块的}
结尾hello()
)。
以下是我的解决方法:
- 不使用注释。坏主意。
- 仅使用内联注释
/* ... */
还可以,但不是很好。 - 强制出现换行符。毕竟,除了注释之外,可能还有其他很好的理由需要使用换行符。
对于实施 #3 有什么想法吗?电子表格手册说你可以用 插入换行符\n
,但这似乎没有发生。如果我这样做,我会得到
var done=0;function hello(){if (!done) {// check if we are done \ndone=1;app.alert("Hello, World!");}}
(\n
直接进入文档级 JavaScript)。
答案1
如果添加 TeX 注释则有效:
%// check if we are done
但是从文档中我预计 // 也可以起作用,所以我建议您写信给作者。