PDF 表单作为背景图像 - 填充表单字段

PDF 表单作为背景图像 - 填充表单字段

我想详细说明我的概念证明,以便在我开始实施之前能够对用于此任务的所选工具/包充满信心。

设想。我有几个文档(每个文档都有自己的模板),为了提供用户友好的文档创建过程,我需要在某些文档中包含一些 pdf 表单,以便最终用户只获得一个 pdf,而不是一堆 pdf。包含的 pdf 数量大多数时候只有一个,但在某些情况下需要包含多个 pdf。

顶级工作流程。我有一个 Web 应用程序,可以根据用户输入生成 HTML 代码。我使用潘多克使用 Latex 模板,我将所需的变量传递给该模板。Pandoc 为最终用户生成 pdf 输出(pdflatex)。此 html -> Pandoc/Latex -> pdf 工作流程运行良好,并且超出了以下问题的范围,仅供您参考。

包含 pdf。这些 pdf 可以或不可以填写为表格。每个 pdf 等于一页。

我的最初概念。

使用 pdfpages 包将 pdf 作为背景图像包含在内

\documentclass[finnish,a4paper,11pt]{article}
\usepackage[a4paper]{geometry}   
\usepackage[utf8]{inputenc}    
\usepackage[final]{pdfpages}   
\usepackage{graphicx}

\begin{document}    
    \setboolean{@twoside}{false}
    \includepdf[pages=-]{file.pdf}   
\end{document}

由于我以自动化方式完成所有表格填写(表格数据作为 pandoc 模板变量),因此我忽略了表格填写功能,仅将文本写入绝对坐标。

快速向现有 PDF 文件添加文本/填写表格

问题。

问 1.您会考虑使用其他什么工具来完成这项任务吗?

问2.您会推荐一些例子吗?

问3.比 Pandoc 命令行变量更好的将变量传递给表单的方法?

问4.欢迎针对此概念的一般性评论和建议。

更新。

我根据下面介绍的方法制作了一个包含 pdf 表单的测试文档。我通过 Pandoc 变量将表单数据传递给 Latex 模板,我可以接受这种方法,因为一旦编程,一切都会自动发生。然而,这引出了另一个问题

问5.由于根据最终用户的选择,Web 应用程序中可能包含多种形式,因此我不得不将这种“if”结构放入模板标头中

\ifthenelse{\equal{\detokenize{$headertitle$}}{\detokenize{myformA}}}
{ % load packages, make new commands to set coordinates for form fields, ... }

和模板文档部分中的类似结构

\ifthenelse{\equal{\detokenize{$headertitle$}}{\detokenize{myformA}}}
{ % run those new commands based on Pandoc variables }

当可能的形式数量增加时,我的模板大小也会相应增加,作为一名程序员(但作为 Latex 新手),我有点担心将所有内容添加到一个模板文件中是否可行。所以,我想问是否有更好的方法来组织这种代码,例如在子模板中或类似的东西中?

我在下面用新的示例代码更新了我自己的答案。

答案1

我根据 Steven (@steven-b-segletes) 在其评论中提供的链接验证了我的概念的第一部分。这是一个简短的、可行示例,以 A4 大小的 pdf 作为背景(不要介意坐标...):

\documentclass[finnish,a4paper,11pt]{article}
\usepackage[a4paper]{geometry}
\usepackage{setspace}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{ifthen}

\ifthenelse{\equal{\detokenize{$headertitle$}}{\detokenize{MyTitle}}}
{
    \newenvironment{myForm}{
        \clearpage % new page for pdf form
        \begin{singlespace}
            \begin{picture}(210,297)(113,460)
                \thispagestyle{empty} % no page numbers here
                \includegraphics[width=21cm, height=29.7cm]{file.pdf} % include pdf form
    }{
            \end{picture}
        \end{singlespace}
     }
    \newcommand\MyFirstField[1]{\put(-481,653){#1}}
}

\begin{document}

% load document body from Pandoc
$body$ 

% if name of current document equals MyTitle then add and fill form
\ifthenelse{\equal{\detokenize{$headertitle$}}{\detokenize{MyTitle}}}
{
    \begin{myForm}
        \MyFirstField{$MyFirstVariable$}
    \end{myForm}
}

\end{document}

我猜想这也可以使用 pdfpages 来完成,但我无法说出使用 pdfpages 的优缺点。我已经为包含 25 个字段的表单制作了一个模板,花了大约 90 分钟才找到正确的坐标。由于我有几十个表单(并且还在增加)需要以这种方式实现,因此我需要找到或制作一个工具来加速此过程。某种使用鼠标点击的工具。

我的问题的第三部分,关于 Pandoc 和命令行变量,仍然悬而未决。在生成 pdf 时,将多个变量传递给 Pandoc 使用的模板的最佳做法是什么。在我的实际模板中,我将提供所有表单输入作为参数/变量。我知道如何用 Pandoc 的 --variable 来做到这一点,但如果有更强大的方法,我很乐意探索。

相关内容