用途
该技能用于以编程方式生成、填写和组装 PDF 文档,服务于法律、人力资源和商业工作流。适用场景包括:法律表单自动化(消除犯罪记录、移民、合同)、批量发票/收据生成、证书创建(完成、参与、奖项)、从模板组装合同、政府表单填写(IRS、法院文件)、多文档打包。不适用于:简单 PDF 查看(用浏览器或 pdf.js)、基础文件转换(用在线工具)、OCR 文本提取(用 Tesseract.js 或 AWS Textract)、手工编辑 PDF(用 Adobe Acrobat)。
主要能力
- 填写已有 PDF 表单:使用 pdf-lib 的
form.getTextField().setText()、复选框、下拉框等。 - 从 HTML/CSS 生成 PDF:使用 Puppeteer,适合发票、报告等复杂布局。
- 学术排版:使用 LaTeX。
- 合并 PDF:使用 pdf-lib。
- 数字签名:pdf-lib 创建签名字段,配合 DocuSign API 发送签署。
- 扁平 PDF 坐标叠加:针对无表单字段的政府表单,在精确 X,Y 坐标绘制文本。
- 多州表单生产工作流:下载官方表单、检查、分类、创建 JSON 坐标配置、调试网格、视觉 QA。
技术选型
| 特性 | pdf-lib | Puppeteer | LaTeX |
|---|---|---|---|
| 表单填写 | 原生支持 | 复杂 | 不支持 |
| 模板渲染 | 不支持 | HTML/CSS | 模板 |
| 性能(1000 PDF) | 5秒 | 60秒 | 30秒 |
| 文件大小 | 小 | 中 | 小 |
| 签名字段 | 支持 | 不支持 | 不支持 |
| 最适合 | 政府表单 | 发票、报告 | 学术论文 |
决策树:填写已有表单 → pdf-lib;复杂布局 → Puppeteer;学术格式 → LaTeX;合并 PDF → pdf-lib;数字签名 → pdf-lib + DocuSign API。
使用方式与反模式
技能详细列出常见反模式及正确做法:
- 用 Puppeteer 做简单表单填写:错误,慢 12 倍、内存高 10 倍、无法保留表单字段。正确用 pdf-lib。
- 填写后不扁平化表单:用户可编辑已填内容,导致数据不一致。正确调用
form.flatten()。草稿、多步流程、供用户手动填写的模板不应扁平化。 - 从 HTML 生成 PDF 不控制分页:内容跨页断句。正确使用 CSS
page-break-before/after/inside。 - 不处理签名字段:将签名作为图片插入,不具法律效力。正确创建签名字段或集成 DocuSign API。
- 存储已填 PDF 不加密:敏感法律文档明文存储。正确加密(用户密码、S3 SSE)并记录访问。
- 从零生成表单:法院拒绝非官方表单。正确在官方模板上叠加文本。
扁平 PDF 坐标叠加
针对无字段的政府表单,采用三层策略:可填写 PDF → 用表单字段;扁平 PDF + 坐标 → 绘制文本叠加;无模板 → 紧急回退并加警告横幅。坐标测量方法包括:可视化坐标拾取工具(pdf-coordinates)、JSON 配置(每表单一个 JSON 文件)、调试网格叠加。文本溢出处理:截断加省略号、缩小字体(最小 7pt)、多行换行。字段输入约束在数据收集时防止溢出。
生产检查清单
表单字段正确填写、填写后扁平化、分页控制、创建签名字段、PDF 加密存储、访问日志、自动删除计划、嵌入字体、文件大小优化(<5MB)、批量生成测试(1000+ PDF)。
适用场景与限制
适用:批量填写政府表单、从模板生成发票、批量创建证书、组装多文档包。不适用:浏览器查看 PDF、手工编辑 PDF、OCR 文本提取。合规要求:HIPAA 加密与访问日志、GDPR 删除权与数据最小化、州律师规则保护律师-客户特权。