Fill XFA PDF Forms

Polar Sponsor
爱发电 赞助
.NET 9.0

以编程方式填充 XFA(Adobe LiveCycle)PDF 表单。适用于具有 Form: XFA 的 .pdf 文件(可用 pdfinfo 检查)。常用工具如 pdftk 等。

填充 XFA PDF 表格

功能概述

填充 XFA PDF 表格是一项面向实际任务的技能,主要用于从 CLI 中填入 Adobe LiveCycle XFA 表格;保护标准 PDF 工具无法填补的空白;

核心要点

  • 为什么此已存在 QQFA 表格( 格式: XFA in pdfinfo) 将数据嵌入到 XML 内部。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

填充 XFA PDF 表单

通过命令行(CLI)填充任意 Adobe LiveCycle XFA 表单。填补了标准 PDF 工具无法解决的空白。

为何需要此工具

XFA 表单(pdfinfo 输出中显示为 Form: XFA)将数据以 XML 形式嵌入 PDF 内部,而非使用标准 AcroForm 字段。诸如 pdftk、pypdf 和 PyPDF2 等工具会静默失败或输出空结果。本脚本直接修改嵌入的 XFA XML 内容。

前提条件

pip install pikepdf

快速开始

SCRIPT="/scripts/fill_xfa.py"

# 1) 验证表单是否为 XFA 格式:
pdfinfo form.pdf | grep Form  # 应显示:Form: XFA

# 2) 发现字段名称:
python3 "$SCRIPT" fields form.pdf

# 3) 从 JSON 填充表单:
python3 "$SCRIPT" fill form.pdf -o filled.pdf -d data.json

命令

fields — 列出数据字段

python3 "$SCRIPT" fields form.pdf

输出按字母顺序排序的字段名,并附带当前值及重复出现次数。

fill — 设置字段值

支持三种输入方式,可自由组合使用:

# 可重复使用的 --set 参数:
python3 "$SCRIPT" fill form.pdf -o out.pdf 
  --set "Eigentümer_Name=Müller" 
  --set "Eigentümer_Vorname=Anna" 
  --set "PLZ=84424"

# JSON 文件:
python3 "$SCRIPT" fill form.pdf -o out.pdf -d fields.json

# 通过 stdin 管道输入:
printf '{"Name":"Müller","Vorname":"Anna"}' | 
  python3 "$SCRIPT" fill form.pdf -o out.pdf --stdin

JSON 数据格式

{
  "Feldname": "Wert",
  "Eigentümer_Name": "Müller",
  "Datum": "2026-05-05"
}

字段名必须与表单中 XML 元素的名称完全一致(可通过 fields 命令发现)。

重复字段

某些表单会复用字段名(例如多个 Textfeld1)。支持两种模式:

  • 所有位置设为相同值: --set Textfeld1=3 将所有同名字段设为 "3"
  • 每个重复项设为不同值: 传入数组:{"Textfeld1": ["A", "B", "C"]},值将按顺序分配给各重复字段(第一个字段得 "A",第二个得 "B",依此类推)

限制条件

  • 仅适用于 XFA 表单 —— 请先验证:pdfinfo form.pdf | grep Form
  • 表单不得受密码保护
  • 命名空间恢复仅保留首个 xmlns:* 声明(通常不影响使用)
  • 部分表单在填充后仍需手写签名(wet-ink signature)

常见使用场景

  • 政府注册类表单(德语:Behördendrucke,如 Landkreis 下发的各类表格)
  • 公用事业公司表单(垃圾清运、水电等)
  • 学校入学申请表
  • 从官方网站下载的任意 Adobe LiveCycle Designer 表单

示例:德国垃圾桶注册表单(Tonnenanmeldung)

# 发现字段:
python3 "$SCRIPT" fields tonnenanmeldung_blank.pdf

# 从 JSON 填充(通过 stdin 管道输入):
python3 "$SCRIPT" fill tonnenanmeldung_blank.pdf -o tonnenanmeldung_filled.pdf --stdin <<'EOF'
{
  "Neuantrag": "1",
  "Eigentümer_Name": "Müller",
  "Eigentümer_Vorname": "Anna",
  "Eigentümer_Straße": "Hauptstraße",
  "Eigentümer_Straße_Nummer": "5",
  "Eigentümer_PLZ": "84424",
  "Eigentümer_Ort": "Isen",
  "Eigentümer_seit": "2026-01-15",
  "Grundstück_Straße": "Beispielweg",
  "Grundstück_PLZ": "85435",
  "Grundstück_Ort": "Erding",
  "Grundstück_Haus_Nummer": "12",
  "Textfeld1": "3",
  "Restmüll_ab": "07/2026",
  "Zugang_80_l": "1",
  "Bio_Zugang_80_l": "1",
  "Papier_Zugang_240_l": "1",
  "Kontoinhaber_Name": "Müller, Anna",
  "Kontoinhaber_Straße": "Hauptstraße 5",
  "Kontoinhaber_Ort": "84424 Isen",
  "Kontoinhaber_Kreditinstitut": "VR-Bank",
  "Kontoinhaber_IBAN": "DE",
  "Kontoinhaber_IBAN_Nummer": "1234567890",
  "Kontoinhaber_BIC": "GENODEF1XXX",
  "Datum": "2026-05-05"
}
EOF

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习