我正在尝试使用 Latex 创建可填写的 PDF 表格。
背景故事: 我有一个 pdf 表单,可以由人工填写,也可以使用 python 脚本填写。该 pdf 是使用 inkscape、libreoffice writer 和 pdftk 创建的。表单的基本布局是在 inkscape 中创建的。svg 被导出为 pdf。导出的 pdf 在 libreoffice writer 中打开,并在其中添加了表单字段。我的一个表单有 2 页,因此每页都将创建为单独的 pdf,然后使用 pdftk 将它们连接在一起。结果是一个 pdf 表单,可以由人工或脚本填写。然后我创建了一个 python 脚本,使用 pdfrw 来填写一些表单字段。
问题是更改表单是一个漫长而又过于复杂的过程。我正在尝试使用 latex 创建表单。
我已经在乳胶中创建了一个可以由人工填写的表格,但是 python 脚本找不到任何要填写的内容。
我认为问题是我错过了文本小部件注释或者小部件注释来自从 latex 文件生成的 pdf。
以下是其中之一文本小部件注释这在原始 pdf(表单)中存在,但在从 latex 文件生成的 pdf(表单)中不存在:
34 0 obj
<</Type/Annot/Subtype/Widget/F 4
/Rect[54.027 494.192 557.377 557.261]
/FT/Tx
/P 19 0 R
/T(partsRequired)
/Ff 4096
/V <FEFF>
/DV <FEFF>
/DR<</Font 6 0 R>>
/DA(0.1372549019 0.1490196078 0.1607843137 rg /He 10.006 Tf)
/AP<<
/N 79 0 R
>>
>>
endobj
我已经在我的 latex 文档中使用了\usepackage{hyperref}
和\pdfminorversion=6
,但生成的 pdf 没有任何文本小部件注释。
我究竟做错了什么?
表单.tex:
\documentclass[14pt,a4paper]{extarticle}
\usepackage{xcolor}
\usepackage{multicol}
\pdfminorversion=6
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage[left=15mm,right=15mm,top=8mm,bottom=10mm]{geometry}
\usepackage{float}
\usepackage{multirow}
\usepackage{tabularx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
\renewcommand\LayoutTextField[2]{%
#1 \raisebox{-3.0pt}{#2}%
}
\newlength\templength
\newcommand{\DefaultTextField}[2][]{%
\settowidth\templength{#2 }%
\mbox{\TextField[align=1,bordercolor=0.78 0.78 0.75,backgroundcolor={},#1,height=4ex,width=\dimexpr\linewidth-\templength]{#2}}%
}
\newlength\templengthtwo
\newcommand{\DefaultTextFieldMultiline}[2][]{%
\settowidth\templengthtwo{#2 }%
\mbox{\TextField[align=1,bordercolor=0.78 0.78 0.75,backgroundcolor={},#1,width=\dimexpr\linewidth-\templengthtwo]{#2}}%
}
\renewcommand\LayoutCheckField[2]{%
\raisebox{-1.0pt}{#2}\hspace*{2mm}#1%
}
\newcommand{\DefaultCheckBox}[2][]{%
\mbox{\CheckBox[bordercolor=0 0 0,backgroundcolor={},borderwidth=0.4mm,height=5mm,width=5mm,#1]{#2}}%
}
\newenvironment{changemargin}[2]{%
\begin{list}{}{%
\setlength{\topsep}{0pt}%
\setlength{\leftmargin}{#1}%
\setlength{\rightmargin}{#2}%
\setlength{\listparindent}{\parindent}%
\setlength{\itemindent}{\parindent}%
\setlength{\parsep}{\parskip}%
}%
\item[]}{\end{list}}
\begin{document}
%\def\DefaultHeightofText[12pt]
\def\DefaultHeightofText{14pt}%
\begin{Form}
\begin{center}
\vspace{-2.5ex}
\underline{\large\textbf{Customer Receipt}}
\end{center}
\begin{center}
\vspace{-0.5ex}
\begin{tabular}{lll}
\DefaultCheckBox[name=collectCheckBox]{Collection } &
\DefaultCheckBox[name=dropoffCheckBox]{Dropoff } &
\DefaultCheckBox[name=returnCheckBox]{Return }
\end{tabular}
\end{center}
\begin{flushleft}
\section{Device Details}
\vspace{-0.5ex}
\renewcommand{\arraystretch}{1.5}%
\noindent
\begin{tabular}{@{}L{\dimexpr0.5\textwidth-\tabcolsep}L{\dimexpr0.5\textwidth-\tabcolsep}@{}}
\multicolumn{2}{@{}p{\textwidth}@{}}{\DefaultTextField[name=makeAndModel,width=0.25\textwidth]{Make \& Model }} \vspace{.7ex} \\
\multicolumn{2}{@{}p{\textwidth}@{}}{\DefaultTextField[name=serialNumber,width=0.25\textwidth]{Serial Number }}
\end{tabular}
\end{flushleft}
\end{Form}
\end{document}