如何向 PDF 表单添加文本小部件注释?

如何向 PDF 表单添加文本小部件注释?

我正在尝试使用 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}

相关内容