来自表单字段的可编程 PDF!:D

来自表单字段的可编程 PDF!:D

想法是这样的。我希望我的学生有一个带有可填写字段的 PDF,并且会根据他们输入的数据在同一个 PDF 中绘制一个(简单的)图形。比如说,他们会输入要绘制的圆的半径。我想如果我在 Latex 中创建 PDF,也许这是可能的,因为在 PDF 中创建动画等复杂的事情。你们觉得呢?这可能吗?还有其他我不知道的“编程”PDF 的环境吗?谢谢!

答案1

PDF 可能不是适合此目的的格式,但 SVG 肯定是。图形对象可使用 JavaScript 编写脚本。

单击图像并按F11全屏显示:

使用以下方式编译 TeX 输入

latex example
latex example
dvisvgm --bbox=papersize --font-format=woff2 --zoom=-1 example

example.tex

\documentclass[aspectratio=169]{beamer}
\usefonttheme{serif}

\usepackage{atbegshi}
\AtBeginShipout{\AtBeginShipoutUpperLeft{%
  \special{dvisvgm:rawdef
    <script type="text/javascript">
      <![CDATA[ function $(id){return document.getElementById(id.toString().trim());}; ]]>
    </script>
  }}}

\begin{document}

\begin{frame}[t]{Interactive graphics}

Enter $x, y, R$:
\special{dvisvgm:raw
  <foreignObject transform='translate({?x},{?(y-14)})' width='100' height='20'>
    <input type='text' id='myInput' value='-140,-80,20'
      style='font-size: 10px; padding: 0; border-radius:0'
      xmlns='http://www.w3.org/1999/xhtml'/>
  </foreignObject> 
}\hspace{110bp}
\special{dvisvgm:raw
  <foreignObject transform='translate({?x},{?(y-16)})' width='128' height='34'>
    <input id="mySubmit" type='submit' value='Draw circle'
      onclick='
        [x,y,R]=$("myInput").value.toString().split(",");
        $("myCircle").setAttribute("cx", x);
        $("myCircle").setAttribute("cy", y);
        $("myCircle").setAttribute("r", R);
      '
      xmlns='http://www.w3.org/1999/xhtml'/>
  </foreignObject> 
}\\[0.3\textheight]

\makebox[\linewidth]{%
  \special{dvisvgm:raw
     <g transform='translate({?x},{?y})scale(1,-1)'>
     <circle id="myCircle" cx="-140" cy="-80" r="20" stroke="black" stroke-width="3" fill="red"/>
     <circle fill="black" r="3"/>
     </g>
  }\makebox[0pt][l]{$\;(0,0)$}}
\end{frame}

\end{document}

相关内容