TextField 和 animateinline

TextField 和 animateinline

我有一个\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}两个层table1table2,它们属于一个公共单选按钮组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.insinsdljs.dtxinsdljs.inslatex*.ins

相关内容