使用该包insDLJS
,可以添加JavaScript到PDF 文档由 LaTeX 生成。要引用特定元素,可以使用this.getField("myElementName")
。我可以给 LaTeX 中的任何元素指定字段名称吗?如果可以,如何操作?
例如,假设我有一个使用包的彩色文本框tcolorbox
,我想使用来影响它的边框颜色(colframe
)JavaScript。
\begin{tcolorbox}[width=25mm,colback={green},colframe={orange}]
Hello World!
\end{tcolorbox}
如果文本框有引用名称,代码可能类似于this.getField("myTextBox").borderColor = color.red;
。但我该如何给这个文本框命名myTextBox
?其次,我如何确定框的哪些方面可以受到影响(.borderColor
部分)?
答案1
PDF 文档页面上描边和填充操作产生的文本和图形无法使用 JavaScript 访问或修改。
在有限的程度上,PDF 图层(正式名称为可选内容组,OCG)可用于在 PDF 中相互替换、隐藏或显示页面内容。但这不一定需要 JavaScript(见下面的示例)。
JavaScript 用于访问和定义交互元素(官方称为 PDF 注释)的行为,例如按钮字段、表单、嵌入式多媒体、链接等,或获取全局文档属性。
许多触发事件(页面打开、关闭、鼠标悬停、向下、向上等)可以与使用 JavaScript 定义或未定义的动作相关联。
这PDF 规范和JavaScript 文档定义什么是可能的。但请注意,文档标准的实现在不同的 PDF 查看器之间有很大不同。参考 PDF 查看器是 A-Reader 和 A-Acrobat。
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{ocgx2}
\begin{document}
\begin{ocg}{Orange Colframe}{orange}{true}
\makebox[0pt][l]{%
\begin{tcolorbox}[width=25mm,colback={green},colframe={orange}]
Hello World!
\end{tcolorbox}%
}%
\end{ocg}%
\begin{ocg}{Red Colframe}{red}{false}%
\makebox[0pt][l]{%
\begin{tcolorbox}[width=25mm,colback={green},colframe={red}]
Hello World!
\end{tcolorbox}%
}%
\end{ocg}
\switchocg{orange red}{\fbox{Toggle}} Colframe colour.
\end{document}
答案2
根据 AlexG 的建议使用PDF 图层,我制作了以下示例,结合了图层切换和JavaScript功能:
\documentclass[a4paper]{article}
\usepackage{animate}
\usepackage{tcolorbox}
\usepackage[pdftex]{insdljs}
\begin{insDLJS}[test]{test}{JavaScript}
var myToggle = 0;
function mySelect() {
if (myToggle) {
myToggle = 0;
anim["myAnimation1"].frameNum = 0;
} else {
myToggle = 1;
anim["myAnimation1"].frameNum = 1;
}
this.getField("myTextBox").value += 1;
}
\end{insDLJS}
\begin{document}
\begin{Form}
\PushButton[name=myButton1,borderwidth=0px,bordercolor={1 1 1},onclick={mySelect(1);}]{
\begin{animateinline}[nomouse,step,label=myAnimation1]{0}
\begin{tcolorbox}[width=20mm,colback={green},colframe={orange}]
On
\end{tcolorbox}
\newframe
\begin{tcolorbox}[width=20mm,colback={yellow},colframe={red}]
Off
\end{tcolorbox}
\end{animateinline}}
\hspace{4mm}
\TextField[name=myTextBox,borderwidth=1px,bordercolor={0 0 0},readonly=true]{}
\end{Form}
\end{document}
这不是包ocg
,而是使用animate
。