eik*_*ike 9 command-line shell pdf poppler
是否有一个工具可以从 shell 以非交互方式填写 PDF 表单?
对于我的用例,只需为每个字段设置文本(以字段定义的任何顺序)并保存 PDF 文件就足够了,但为了使问题更笼统,可以通过 CLI 进行任何形式的交互(勾选框,选择单选按钮、填充文本、单击按钮等)。
我知道 poppler 有一些访问 PDF 表单的函数,但我还找不到使用这些函数的 CLI 实用程序。
Fel*_*xJN 16
是的,pdftk
有这个选项。从man pdftk
\n\n\n
fill_form <FDF data filename | XFDF data filename | - | PROMPT>
使用 FDF 文件、XFDF 文件或标准输入中的数据填充单个输入 PDF 的表单字段。在 fill_form 中输入数据文件名 af\xe2\x80\x90\n,或使用 - 通过 stdin 传递数据,如下所示:
\n\n
pdftk form.pdf fill_form data.fdf output form.filled.pdf
怎么做?
\n1. 提取字段名称
\npdftk forms.pdf dump_data_fields\n
Run Code Online (Sandbox Code Playgroud)\n将删除一个列表,其中包含以下条目:
\n---\nFieldType: Text\nFieldName: Name_Last\nFieldNameAlt: LAST\nFieldFlags: 0\nFieldJustification: Left\n---\n
Run Code Online (Sandbox Code Playgroud)\n2. 创建fdf
文件
fdf
- 文件是表单填写者。我们使用一般符号为
<< /T(FIELD_NAME)/V(FIELD_VALUE) >>\n
Run Code Online (Sandbox Code Playgroud)\n并且需要添加页眉和页脚。来源
\n%FDF-1.2\n1 0 obj<</FDF<< /Fields[\n<< /T (Name_Last) /V (Smith) >>\n<< /T (Name_First) /V (John) >>\n] >> >>\nendobj\ntrailer\n<</Root 1 0 R>>\n%%EOF\n
Run Code Online (Sandbox Code Playgroud)\n要另存为input.fdf
3. 创建文档
\npdftk forms.pdf fill_form input.fdf output filled.pdf\n
Run Code Online (Sandbox Code Playgroud)\n4. 也许您想再检查一下?
\npdftk filled.pdf dump_data_fields\n\n---\nFieldType: Text\nFieldName: Name_Last\nFieldNameAlt: LAST\nFieldFlags: 0\nFieldValue: Smith\nFieldJustification: Left\n---\n
Run Code Online (Sandbox Code Playgroud)\n所以姓氏已被写入文件中。
\n5. 额外处理
\n对于单选按钮,该值是 -entries 之一FieldStateOption
,对于复选框使用V(Yes)
和/V(Off)
。
如果您想让它更像是逐行查询类型的东西,您可能需要在其周围包装一个脚本,该脚本读取字段类型和名称并提示输入,然后自动创建文件fdf
。但这本身就是一个小项目。
或者,您可能更喜欢xfdf
- 格式(可以看到)。它基于xml
-style 条目。
归档时间: |
|
查看次数: |
4631 次 |
最近记录: |