我有一个\ChoiceMenu
带有两个选项的 ,根据这个选择,我想显示两个框架中的一个。如果我\TextField
在框架中使用 ,我会得到这个错误“ error (ext4): link annotations cannot be inside an XForm
”。
有没有办法解决这个问题或者有更好的解决方案来实现它?
\documentclass[11pt,a4paper]{article} % Use A4 paper with a 11pt font size article
\usepackage{eforms}
\usepackage{animate}
\usepackage{pgfplots} %Required for graph
%“running in backwards compatibility mode” Compiler Warning
\pgfplotsset{compat=newest,compat/show suggested version=false}
\begin{document}
\begin{Form}
\ChoiceMenu[radio,name=trafo,radiosymbol=4,onfocus={anim.Tables.frameNum=0;}]{}{\phantom{.}=AC]} Option A \hfill%
\ChoiceMenu[radio,name=trafo,radiosymbol=4,onfocus={anim.Tables.frameNum=1;}]{}{\phantom{.}=AC]} Option B \hfill%
\begin{center}
\begin{NoHyper}
\begin{animateinline}[nomouse,step,label=Tables]{0}
\begin{tabular}{|c|c|}\hline
\TextField[name=phonenumber1]{Phone:} &{\color{white}2} \\\hline
& \\\hline
& \\\hline
\end{tabular}
\newframe%
%\TextField[name=phonenumber2]{Phone:} \TextField[name=phonenumber,maxlen=10]{Phone2:}
\begin{tabular}{|c|c|}\hline
1 & 2\\\hline
& \\\hline
\end{tabular}
\end{animateinline}
\end{NoHyper}
\end{center}
\end{Form}
\end{document}
答案1
animate
将动画帧的图形内容编译成所谓的“Form XObjects”,或简称为“XForms”,以便以后引用。但是,由于 PDF 格式的限制,这不适用于 PDF 注释(交互元素)。
但是我们可以使用 OCG(又名 PDF 图层)来使文本、图形以及 PDF 注释(在本例中为文本字段)成为可选项。
ocgx2
提供\ocgxii@insert@OC
插入原始 PDF 代码以使 PDF 注释可感知图层的命令。在下面的示例中,我们使用 来\ocgxii@insert@OC
修补所有hyperref
的表单生成命令。
该包的表单生成命令eforms
是一个很好的选择,因为它们允许插入原始 PDF 代码(感谢宏\rawPDF{...}
)以便微调表单元素的行为。请参阅第二个代码框。
该示例通过 生成\begin{ocg}...\end{ocg}
两个层table1
和table2
,它们属于一个公共单选按钮组Tables
,使得一次只能启用其中一个。
使用包的示例hyperref
:
\documentclass[11pt,a4paper]{article}
\usepackage{hyperref} % \TextField etc.
\usepackage{ocgx2} % PDF Layers
\makeatletter
% patch hyperref's Form producing commands to make them layer-aware
\let\PDFFormCheckOrig\PDFForm@Check
\def\PDFForm@Check{\PDFFormCheckOrig\ocgxii@insert@OC}
\let\PDFFormPushOrig\PDFForm@Push
\def\PDFForm@Push{\PDFFormPushOrig\ocgxii@insert@OC}
\let\PDFFormListOrig\PDFForm@List
\def\PDFForm@List{\PDFFormListOrig\ocgxii@insert@OC}
\let\PDFFormRadioOrig\PDFForm@Radio
\def\PDFForm@Radio{\PDFFormRadioOrig\ocgxii@insert@OC}
\let\PDFFormTextOrig\PDFForm@Text
\def\PDFForm@Text{\PDFFormTextOrig\ocgxii@insert@OC}
\let\PDFFormSubmitOrig\PDFForm@Submit
\def\PDFForm@Submit{\PDFFormSubmitOrig\ocgxii@insert@OC}
\let\PDFFormResetOrig\PDFForm@Reset
\def\PDFForm@Reset{\PDFFormResetOrig\ocgxii@insert@OC}
\makeatother
%alternative check box command for layer switching
\newcommand\layerCheckBox[3]{%
% #1: layer name (as shown in Layers tab), #2: layer id,
% #3: initial visibility
\resizebox{1.44ex}{!}{%
\makebox[0pt][l]{\showocg{#2}{$\circ$}}%
\begin{ocg}{#1}{#2}{#3}$\bullet$\end{ocg}%
}%
}
\usepackage{graphics} % \resizebox
\begin{document}
\begin{Form}
\layerCheckBox{Table 1}{table1}{on}~Option~A \quad \layerCheckBox{Table 2}{table2}{off}~Option~B
\makebox[0pt][l]{%
\begin{ocg}[radiobtngrp=Tables]{Table 1}{table1}{on}%
\begin{tabular}{|c|c|}\hline
\TextField[name=phonenumber1]{Phone:} & 2\\\hline
& \\\hline
& \\\hline
\end{tabular}%
\end{ocg}%
}%
\begin{ocg}[radiobtngrp=Tables]{Table 2}{table2}{off}%
\begin{tabular}{|c|c|}\hline
1 & 2\\\hline
& \\\hline
\end{tabular}%
\end{ocg}%
\end{Form}
\end{document}
使用eforms
包:
\documentclass[11pt,a4paper]{article}
\usepackage{eforms} % \textField
\usepackage{ocgx2} % PDF layers
\makeatletter
%inserts raw PDF code to make annotations layer-aware
\let\insertOC\ocgxii@insert@OC
\makeatother
\usepackage{graphics} % \resizebox
% layer switching command based on \showocg from ocgx2; used instead of \ChoiceKey
\newcommand\layerCheckBox[3]{%
% #1: layer name (as shown in Layers tab), #2: layer id, #3: initial visibility
\resizebox{1.44ex}{!}{%
\makebox[0pt][l]{\showocg{#2}{$\circ$}}%
\begin{ocg}{#1}{#2}{#3}$\bullet$\end{ocg}%
}%
}
\begin{document}
\layerCheckBox{Table 1}{table1}{on}~Option~A \quad \layerCheckBox{Table 2}{table2}{off}~Option~B
\makebox[0pt][l]{%
\begin{ocg}[radiobtngrp=Tables]{Table 1}{table1}{on}%
\begin{tabular}{|c|c|}\hline
Phone: \textField[\rawPDF{\insertOC}]{phonenumber1}{2.51cm}{2.2ex} & 2 \\\hline
& \\\hline
& \\\hline
\end{tabular}%
\end{ocg}%
}%
\begin{ocg}[radiobtngrp=Tables]{Table 2}{table2}{off}%
\begin{tabular}{|c|c|}\hline
1 & 2\\\hline
& \\\hline
\end{tabular}%
\end{ocg}%
\end{document}
很遗憾,电子表格不是 TeX-Live 的一部分,必须通过下载、、、到eforms.dtx
当前目录并运行文件来手动安装。eforms.ins
insdljs.dtx
insdljs.ins
latex
*.ins