PDF Generator 是一个用于以程序化方式创建和操作 PDF 文件的技能。当用户需要生成 PDF、填写 PDF 表单、提取 PDF 内容、添加水印或覆盖层、合并 PDF、分析 PDF 结构时可以使用;当用户只是想打开或查看 PDF、需要复杂排版与自动换行的页面布局、处理受密码保护的 PDF 或对扫描件做 OCR 时,则不建议使用。
使用前提:需要安装 Deno(https://deno.land/);模板类操作需要输入 PDF 文件;从零生成需要 JSON 规格文件。
【两种操作模式】 模板模式:修改已有的 PDF 模板,包括填写表单字段(文本、复选框、下拉框)、添加覆盖层(文字、图片、形状)、合并与组合 PDF。 从零模式:使用 JSON 规格文件从无到有创建 PDF。
【模板模式流程】
- 分析模板:运行 deno run --allow-read scripts/analyze-template.ts form-template.pdf > inventory.json,输出包含文件名、页数、标题、作者、各页信息、表单字段(名称/类型/值)、占位符等。
- 创建填写规格 form-data.json,其中包含 formFields 数组(字段名与值)以及 flattenForm 选项。
- 生成填写后的 PDF:deno run --allow-read --allow-write scripts/generate-from-template.ts form-template.pdf form-data.json filled-form.pdf。
【覆盖层(水印、印章)】 通过 watermark-spec.json 定义 overlays 数组,支持文字(可设置页码、坐标、字号、颜色、旋转角度)和图片(可设置页码、坐标、路径、宽高)等类型。
【合并 PDF】 通过 merge-spec.json 定义 prependPdfs(在模板前添加页面)、appendPdfs(在模板后添加页面,可用 pages 数组选择特定页)和 excludePages(排除页面)。
【从零生成流程】
- 创建 spec.json,包含 title、author、pages 等,页面中用 elements 定义元素。
- 生成 PDF:deno run --allow-read --allow-write scripts/generate-scratch.ts spec.json output.pdf。
【元素类型(从零模式)】 text(文字,可设 x、y、text、fontSize、font、color、rotate);image(PNG/JPEG 图片,可设 x、y、path、width、height、opacity);rectangle(矩形,可设 x、y、width、height、color、borderColor);line(直线,可设 startX、startY、endX、endY、thickness);circle(圆形,可设 x、y、radius、color、borderColor);table(基础表格,可设 x、y、rows、columnWidths、rowHeight)。
【可用字体】Helvetica(默认)、HelveticaBold、HelveticaOblique、TimesRoman、TimesBold、Courier、CourierBold。
【页面尺寸】A4(595.28 x 841.89 点)、Letter(612 x 792 点)、Legal(612 x 1008 点),以及以点为单位的自定义 [width, height]。
【脚本参考】analyze-template.ts 用于从 PDF 提取文本、元数据、表单字段(权限 --allow-read);generate-from-template.ts 用于填写表单、添加覆盖层、合并 PDF(权限 --allow-read --allow-write);generate-scratch.ts 用于根据 JSON 规格创建 PDF(权限 --allow-read --allow-write)。
【常见问题】找不到表单字段时,先运行 analyze-template.ts 获取准确字段名(字段名区分大小写,部分 PDF 的不可填写文本看起来像表单字段);文字位置偏移时,注意 PDF 坐标从左下角 (0,0) 开始,Y 向上增大,X 向右增大,可用 analyze-template.ts 查看页面尺寸;图片不显示时,检查路径是否相对于 spec.json、确认格式为 PNG 或 JPEG、确保坐标在页面范围内;合并后页序错误时,注意 prependPdfs 加在模板前、appendPdfs 加在模板后,pages 数组可选择特定页如 [1, 3, 5]。
【限制】表格无内置自动布局,需手动指定列宽;从零模式仅支持标准字体,不支持嵌入自定义字体;文字不会自动换行到下一页;只能填写已有表单,不能创建新字段;不支持加密,无法创建受密码保护的 PDF;图形能力为基础级别,无渐变、图案或复杂路径;文本提取并非对所有 PDF 都完美,取决于其结构。
【相关技能】pptx-generator(创建 PowerPoint 演示文稿)、docx-generator(创建 Word 文档)、xlsx-generator(创建 Excel 表格)。