创建可填写的 PDF

创建可填写的 PDF

我想创建一个 LaTeX 文档,当它被渲染成 PDF 时,其中包含可以使用 Adob​​e Reader 或其他类似程序填写的表格。然后我希望能够提取数据。出于所有常见原因(非免费、不同平台需要不同版本等),我有意避免使用 Acrobat。

这能做到吗?

答案1

hyperref包提供了一种创建 PDF 表单的方法。我的理解是,表单要么被打印,要么像 HTML 表单一样传输到 Web 服务器。

这里有一个小例子:

\documentclass{article}

\usepackage{hyperref}

\begin{document}

\begin{Form}[action={http://your-web-server.com/path/receiveform.cgi}]
\begin{tabular}{l}
    \TextField{Name} \\\\
    \CheckBox[width=1em]{Check} \\\\
    \Submit{Submit}\\
\end{tabular}
\end{Form}


\end{document}

给出:

结果

答案2

下面是我用来创建表格的代码,这些表格既可以打印出来,用笔填写,也可以在 PDF 查看器中以电子方式填写。打印时,表格会为每个表单字段提供一行。与 Martin Scharrer 的解决方案一样,我也使用该hyperref包。棘手的部分是定义给定长度(此处减去 4 厘米)的输入字段textwidth。它需要覆盖\LayoutTextField钩子。

\documentclass[a4paper,11pt]{article}
\usepackage[latin1]{inputenc} 
\usepackage[pdftex]{hyperref}

\newdimen\longline
\longline=\textwidth\advance\longline-4cm

\def\LayoutTextField#1#2{#2} % override default in hyperref

\def\lbl#1{\hbox to 4cm{#1\dotfill\strut}}%
\def\labelline#1#2{\lbl{#1}\vbox{\hbox{\TextField[name=#1,width=#2]{\null}}\kern2pt\hrule}}

\def\q#1{\hbox to \hsize{\labelline{#1}{\longline}}\vskip1.4ex}

\begin{document}
  \begin{Form}
    \q{First Name}
    \q{Last Name}
    \q{Email}
   \end{Form}
 \end{document}

在此处输入图片描述

在 PDF 查看器中,每一行都成为一个表单字段。

答案3

我用过eforms包,由但丁他们的会员表格(当然我现在找不到它的.tex格式!)。您可能必须eforms自己从 CTAN 下载并解压,因为它不在 TeX Live 中(解压eformsinsdljstaborder,都在eforms包中)。这是我做的注册表中的一个简短示例:

\documentclass{article}
\usepackage[pdftex]{eforms}

% From DANTE's registration form!

\newcounter{infoLineNum}
\setcounter{infoLineNum}{0}
\newcommand{\infoInput}[2][4in]{%
  \stepcounter{infoLineNum}%
  \makebox[0pt][l]{%
    \kern 4 pt
    \raisebox{.75ex}
      {\textField[\W0\BC{}\BG{}\TU{#2}]{name\theinfoLineNum}{#1}{12bp}}%
  }
    \dotfill
}

\begin{document}
    \begin{tabular}{lp{4in}}
   Title                 & \infoInput{Title}\\[6pt]
   First name            & \infoInput{Firstname}\\[6pt]
   Last name             & \infoInput{Surname}\\[6pt]
   E-mail address        & \infoInput{Email}\\[6pt]
   Dietary requirements  & \infoInput{Dietary}\\[6pt]
\end{tabular}

\begin{tabular}{ll}
  Student (\pounds60) 
    & \raisebox{.75ex}{\radioButton{RegType}{10bp}{10bp}{Student}} 
      \\[6pt]
  Academic/post-doc (\pounds120)
    & \raisebox{.75ex}{\radioButton{RegType}{10bp}{10bp}{Academic}} 
      \\[6pt]
  Industrial (\pounds180)
    & \raisebox{.75ex}{\radioButton{RegType}{10bp}{10bp}{Industrial}} 
      \\[6pt]
\end{tabular}

\end{document}

这为文本区域提供了“输入”框,为选择提供了“勾选”框。

我不确定保存表单数据会发生什么:根据 Adob​​e Reader 的说法,无法以这种形式保存。我从未真正见过可以保存数据的 PDF 表单,所以即使 Acrobat 是否可以做到这一点我也不知道。

答案4

我同意Christian Lindig 的回答。 看上去不错。

问题是字段周围有红色边框。这个社区的伙计们确实给出了一些关于如何去除它的建议。对我来说,最简单的方法是

\def\labelline#1#2{\lbl{#1}\vbox{\hbox{\TextField[name=#1,width=#2,bordercolor=white]{\null}}\kern2pt\hrule}} 

只需更改边框的颜色。记得包含包xcolor

也许我应该在评论中写下这个,但我是新来的。

相关内容