如何设计带有用户输入的 LaTeX 表单以进行数据提取?

如何设计带有用户输入的 LaTeX 表单以进行数据提取?

假设您在图 1 中的 PDF 输出/等效文件中有以下形式。我正在考虑如何设计 LaTeX 形式以便进行良好的数据提取(并最终播种到 PostgreSQL 数据库中)。您想要提取以下形式的数据:

  1. 问题 1 答案
  2. 问题 2 的答案
  3. 概要结果

生成 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:使用 Adob​​e 自己的表单数据格式,基本上是 PDF 文件格式的简化版本,如果您想使用 Adob​​e 软件进一步处理数据,它可能会很有用。
  • 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

相关内容