You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pdf-lib(Node.js)处理部分PDF表单展平时出现错误

解决展平特定PDF表单时的「Expected instance of PDFDict2, but got instance of undefined」错误

问题背景

使用pdf-lib库展平Service Canada发布的EMP5611系列PDF表单时触发报错,普通PDF表单可正常处理。

代码片段

const URL = await blobToURL(files[0]); 
const pdfDoc = await PDFDocument.load(URL, {ignoreEncryption:true}); 
const form = pdfDoc.getForm(); 
form.flatten(); // 此处触发错误

错误信息

Expected instance of PDFDict2, but got instance of undefined
...
at PDFForm2.flatten (PDFForm.ts:539:12)

解决方案

这类错误通常源于目标PDF存在非标准的AcroForm结构(如空字段引用、不规范的表单节点),可尝试以下方案:

1. 预处理PDF修复结构

用Ghostscript对问题PDF做预处理,清理异常表单节点:

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dBATCH -sOutputFile=cleaned-form.pdf original-form.pdf

再用pdf-lib加载处理后的PDF执行展平操作。

2. 手动遍历字段并跳过异常项

避免直接调用form.flatten(),改为逐个处理字段并捕获异常:

const URL = await blobToURL(files[0]); 
const pdfDoc = await PDFDocument.load(URL, {ignoreEncryption:true}); 
const form = pdfDoc.getForm(); 
const fields = form.getFields();

for (const field of fields) {
  try {
    field.flatten();
  } catch (err) {
    console.warn(`跳过异常字段: ${field.getName()}`, err);
  }
}

const pdfBytes = await pdfDoc.save();

3. 升级pdf-lib至最新版

该错误可能是库的已知兼容性问题,执行升级命令获取修复:

npm install pdf-lib@latest

内容的提问来源于stack exchange,提问作者Judicael Ramanampison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:12:40