假设您在图 1 中的 PDF 输出/等效文件中有以下形式。我正在考虑如何设计 LaTeX 形式以便进行良好的数据提取(并最终播种到 PostgreSQL 数据库中)。您想要提取以下形式的数据:
- 问题 1 答案
- 问题 2 的答案
- 概要结果
生成 PDF 文件的代码
% https://tex.stackexchange.com/a/384801/13173
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{Form}
\begin{enumerate}
\item \ChoiceMenu[name=football,radio,default=0]{Do you play football?}{Much (2)=2,Little (1)=1,Not at all (0)=0}
\item \ChoiceMenu[name=ice-hockey,radio,default=0]{Do you play ice-hockey?}{Much (2)=2,Little (1)=1,Not at all (0)=0}
\end{enumerate}
\TextField[readonly=true,value=0,calculate={event.value=this.getField("football").value+this.getField("ice-hockey").value;}]{Summary score:}
\end{Form}
\end{document}
图 1 输出
测试 accsupp [由于无法接受用户输入而被拒绝] (Steven)
这段代码不是一个好的例子,因为它具有集成的值,并且没有从用户那里获取值;
\documentclass{beamer}
\usepackage[english]{babel}
\usetheme{Berkeley}
\usepackage{accsupp} % https://ctan.org/pkg/accsupp
\begin{document}
\begin{frame}
\frametitle{Field}
\section{Field 2}
\begin{equation}
\BeginAccSupp{
method=pdfstringdef,
unicode,
ActualText={%
a\texttwosuperior +b\texttwosuperior
=c\texttwosuperior
}
}
a^2 + b^2 = c^2
\EndAccSupp{}
\end{equation}
\end{frame}
\end{document}
图 2 中的输出我并没有真正看到这个带有用户输入的包的意义,因为它没有在表单中询问他们。
图 2 太简单的基本示例的输出accsupp
操作系统:Debian 9
TeXLive:2017
答案1
正如所述保存可填写的表格,您可以创建表单,如果您单击提交按钮,表单的值将通过电子邮件发回给您:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{Form}[action=mailto:forms <[email protected]>?subject=The submitted form]
\begin{enumerate}
\item \ChoiceMenu[name=football,radio,default=0]{Do you play football?}{Much (2)=2,Little (1)=1,Not at all (0)=0}
\item \ChoiceMenu[name=ice-hockey,radio,default=0]{Do you play ice-hockey?}{Much (2)=2,Little (1)=1,Not at all (0)=0}
\end{enumerate}
\TextField[name=summary,readonly=true,value=0,calculate={event.value=this.getField("football").value+this.getField("ice-hockey").value;}]{Summary score:}
\Submit[export=xfdf]{Submit}
\end{Form}
\end{document}
如果您单击该Submit按钮,您的默认电子邮件程序将向您提供的地址(此处[email protected]
)发送一封电子邮件,其中包含一个附件.fdf
。此附件包含以 XML 格式提交的数据:
<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"
><fields
><field name="Submit"
/><field name="football"
><value
>1</value
></field
><field name="ice-hockey"
><value
>2</value
></field
><field name="summary"
><value
>3</value
></field
></fields
><ids original="4C4F1F968A20B15FEDBFD76188D43221" modified="4C4F1F968A20B15FEDBFD76188D43221"
/></xfdf
>
Adobe Acrobat (Reader) 生成的 XML 文件看起来有点奇怪,但可以通过任何 XML 解析器进一步处理。文件的其他可能输出格式(由提交按钮的选项.fdf
指定)包括:export
export=html
:导出数据请求参数句法。export=fdf
:使用 Adobe 自己的表单数据格式,基本上是 PDF 文件格式的简化版本,如果您想使用 Adobe 软件进一步处理数据,它可能会很有用。export=pdf
:将完整填写的 PDF 文件附加到电子邮件,然后您可以按照本答案第二部分的说明进行处理。
另外,你可以考虑使用开源PDFtk从已保存的已填写 PDF 文档中提取数据:运行
pdftk document.pdf dump_data_fields
在填写好的文件中document.pdf
会报告类似
---
FieldType: Button
FieldName: football
FieldFlags: 49152
FieldValue: 0
FieldValue: 1
FieldJustification: Left
FieldStateOption: 0
FieldStateOption: 1
FieldStateOption: 2
FieldStateOption: Off
---
FieldType: Button
FieldName: ice-hockey
FieldFlags: 49152
FieldValue: 0
FieldValue: 2
FieldJustification: Left
FieldStateOption: 0
FieldStateOption: 1
FieldStateOption: 2
FieldStateOption: Off
---
FieldType: Text
FieldName: summary
FieldFlags: 1
FieldValue: 3
FieldJustification: Left