在线 PDF 展平,免费
将所有表单域和注释展平为静态页面内容。即时结果,不上传服务器。
支持 PDF 文件 · 最大 100 MB
展平选项
工作原理
- 在上方选择或拖放一个 PDF 文件。
- 选择要展平的元素(表单域和/或注释)。
- 点击「展平 PDF」在您的浏览器中处理文件 · 不上传任何内容。
- 立即下载已展平的 PDF,其中所有交互元素都已转换为静态内容。
为什么要展平 PDF?
展平 PDF 对于定稿文档、防止意外修改和确保跨系统兼容性至关重要。展平表单时,所有已输入的数据都会变为永久性、不可编辑的内容。这对法律文件、合同、已完成的申请和档案至关重要。展平还会略微减小文件大小,并确保 PDF 在所有设备和应用中的显示完全一致,因为不再需要解析表单。
会展平什么?
- 表单域 · 文本框、复选框、单选按钮、下拉菜单和签名字段会变成静态文本或图形。
- 注释 · 评论、高亮、下划线、图章和其他标记会合并到页面背景中。
- 字段值 · 所有输入到表单域中的数据都会保留,成为永久的页面内容。
- 视觉外观 · 版式、字体、颜色和设计在展平前后完全保持一致。
何时展平 PDF
- 已完成的表单 · 填写申请、合同或问卷后展平以定稿文档。
- 法律文件 · 确保已签署的合同和法律协议在签署后无法再被修改。
- 归档 · 在长期存储前展平,以保持文档不变且可读。
- 分享 · 不希望收件人修改表单域时,发送展平后的 PDF。
- 打印 · 在打印前展平,以确保所有内容都能正确显示在纸张上。
常见问题
展平后 PDF 的外观会不同吗?
不会。展平会保留 PDF 的精确视觉外观。所有表单域、注释和内容与展平前完全相同。只是移除了交互性。
可以撤销展平吗?
不能。PDF 一旦展平,原始表单域和交互元素就与页面背景合并了 · 您无法恢复它们。如果您认为以后可能需要修改,请始终保留原始 PDF 的备份。
如果 PDF 没有表单域会怎样?
如果 PDF 不含任何表单域或注释,文件仍会被处理,但不会执行展平。输出文件与输入文件相似。可安全地展平任何 PDF,即使不含交互元素。
我的 PDF 会发送到服务器吗?
不会。整个展平过程都在您的浏览器本地完成。您的 PDF 从不离开您的设备,完全保证隐私和安全。
展平会减小文件大小吗?
会略有减小。移除表单域定义可根据 PDF 结构将文件大小减小 1–5%。但展平主要用于定稿文档,而不是压缩。
文件大小限制是多少?
工具支持最大 100 MB 的 PDF。处理时间取决于文件大小和复杂度。大多数 PDF 可在数秒内展平。
「展平 PDF」究竟意味着什么
「展平」是那种 PDF 工具的动词,根据展平的对象不同,实际上指代几种真正不同的操作,这种区分很重要,因为操作的成功与失败原因各不相同。表单字段展平是本工具默认执行的操作。从 AcroForm 角度看,PDF 表单字段是一种逻辑构造:文档目录中有一个字段对象,带有像 FirstName 这样的名称和像 Sasha 这样的值,页面上还有一个或多个 widget 注释来视觉呈现这个字段。widget 知道画什么,是因为它的外观字典(/AP)指向一个小的内容流,该流包含绘制操作符、嵌入字体和文本。字段和 widget 是两个不同的对象:一个存储数据,另一个存储图像。展平颠倒了这种关系:外观流被直接绘制到页面的内容流上,就好像它一直是页面的一部分,然后字段和 widget 对象被删除。像素看起来完全相同,但表单结构已经消失。
注释展平是非表单注释的类似操作:便签、高亮、删除线、手绘、文本框标注、印章。每个标记注释也有一个外观流(/AP/N),阅读器用它来绘制标记;展平将该流写入页面并移除注释对象。视觉标记保留,点击、选择、编辑或删除标记的能力消失。本工具默认同时展平表单字段和注释;上面的两个复选框允许你独立禁用任一选项,如果你想保留一种交互性而移除另一种。
透明度展平是另外一回事:它将带有半透明对象的 PDF 转换为一系列完全不透明的拼贴块,合成后呈现相同效果的操作。PDF/A-1 归档转换需要这一步,因为 PDF/A-1 不允许透明度。PDF/A-2 及以后版本原生支持透明度,跳过这一步。本工具不执行透明度展平,术语重叠很不幸,但两者操作截然不同。如果你需要 PDF/A-1 合规,先用本工具展平表单和注释,然后运行一个专门处理透明度步骤的 PDF/A 转换器。
本工具如何工作
本工具使用 pdf-lib,这是由 Andrew Dillon 编写并自 2018 年起以开源形式维护的 JavaScript PDF 库。pdf-lib 用 TypeScript 实现,编译为约 1.1 MB 的纯 JavaScript,没有原生或 WebAssembly 依赖。它在任何 JavaScript 环境中运行:这里是浏览器标签页,但也可以是 Node.js、Deno、React Native 和 service worker。这个库是浏览器端 PDF 操作的事实标准:被 Documenso 使用,被几个主要 SaaS 产品的 PDF 编辑功能使用,被无数内部工具和表单处理流水线使用。
当你选择 PDF 时,浏览器的 File API 将原始字节直接交给运行在页面 JavaScript 引擎中的 pdf-lib。pdf-lib 将文件解析为对象模型,遍历 AcroForm 树以计算字段数,将计数暴露给页面,然后等待「展平」按钮。当你点击「展平」时,选定的选项被传递给 pdf-lib 的 form.flatten() 方法,该方法迭代每个字段,重新生成外观流以捕获当前值,将外观流复制到每个 widget 所在页面的 widget 矩形位置,然后从文档中移除 widget 和字段对象。结果字节被序列化为一个 Blob,页面将其包装成下载 URL。在展平过程中不会触发任何网络请求。你可以验证没有上传:在点击「展平」之前打开浏览器开发者工具的「网络」选项卡,运行操作,观察是否有任何包含文件内容的请求。不会有任何请求。
AcroForm 结构,简述
当 PDF 包含交互式表单时,文档目录包含一个 /AcroForm 条目,指向一个 AcroForm 字典。字典的关键字段是 /Fields(字段对象的数组,每个都有部分名称、当前值、字段类型和 widget 注释引用的 kids 数组)、/DR(默认资源字典,包含被字段外观流引用的字体和色彩空间)、/DA(默认外观字符串,一行内容流片段,例如 0 0 0 rg /Helv 12 Tf,设置默认文本颜色、字体和大小),以及 /NeedAppearances(一个布尔标志)。
/NeedAppearances 标志很重要,因为 pdf-lib 的展平遵循每个 widget 中存储的外观。当标志为 true 时,阅读器应在显示前重新生成外观流,因此磁盘上的流可能是过时的。经验法则是在展平之前重新生成外观,本工具会为你做这件事。一个字段可以在不同页面上有多个 widget 注释(对单选按钮组或重复签名块很有用);一个 widget 只能属于一个字段。widget 本身只是带有 /Subtype /Widget 的注释,包含指向字段对象的父引用、指示在页面何处绘制的 rect,以及在那里绘制的 /AP/N 外观流。
PDF 表单简史
- 1996 年,PDF 1.2,Acrobat 3,AcroForm 推出。 表单字段是文档目录中的 PDF 对象;widget 注释在页面上呈现它们。模型简单,外观由作者固定,数据通过 FDF(Forms Data Format)和 XFDF(XML 变体)往返。
- 2002 年,Adobe 收购 Accelio。 Adobe 继承了 XFA 技术,这是一种加拿大开发的基于 XML 的表单定义语言,JetForm(后改名 Accelio)曾于 1999 年提交给 W3C。
- 2003 年,PDF 1.5,Acrobat 6,在 PDF 内引入 XFA 表单。 XFA 表单是嵌入到 PDF 中作为包的完整 XML 文档。静态 XFA 将 XML 渲染为固定布局;动态 XFA 根据数据、脚本和用户输入更改布局。动态 XFA 只能由 Adobe Reader 和 Adobe Acrobat 显示。
- 2008 年,PDF 1.7 标准化为 ISO 32000-1。 AcroForm 和 XFA 都正式纳入规范,虽然 XFA 是从外部 Adobe 文档中引用的,而不是在规范内完全详述。
- 2017 年,PDF 2.0 作为 ISO 32000-2 发布,XFA 被弃用。 标准现在表示,支持 XFA 的交互式处理器「应当向用户清楚地表明他们正在与 XFA 表单交互」,这是委婉地说该格式正在退场。AcroForm 仍然是唯一标准化的 PDF 表单格式。
- 2020 年起,AcroForm 是实际标准。 大多数非 Adobe 的 PDF 阅读器已完全不再支持 XFA。AcroForm 可以用任何合理的 PDF 库干净地展平,因为结构定义良好。XFA 在非 Adobe 工具中无法展平,因为动态版本需要 JavaScript 引擎和布局引擎,而基本上只有 Adobe Reader 和 Acrobat 自带这些。
注释的世界
PDF 定义了约 25 种注释子类型。展平操作需要处理的,大致按频率排序:Text(便签图标加弹出窗口);Highlight、Underline、Squiggly、StrikeOut(文本标记组,每个都有 /QuadPoints 数组,描述要绘制的四边形);FreeText(直接放在页面上的矩形文本注释,用于标注和内联标签);Line、Square、Circle、Polygon、PolyLine(形状组);Ink(数字笔或触控笔的手绘笔迹);Stamp(印章图像,如「Approved」或「Confidential」);FileAttachment(带附件的图标);Caret(小小的「在此插入文本」标记,通常与 Highlight 配对);Popup(包含对用户可见评论文本的浮动窗口,与其父标记注释一起展平);Widget(表单字段组,通过 AcroForm 展平而非注释展平处理)。
每种注释类型都有自己的外观规则,但展平操作不需要了解它们;它只是将注释 /AP/N 流中的内容渲染到页面上。没有 /AP 的注释(一小部分,主要是格式错误的 PDF)无法可靠地展平,通常被原样保留。Link 注释(可点击的 URL 热点)技术上是注释,但通常不被本工具展平:视觉指示(带下划线的文本)已经是页面内容的一部分,没有图形需要嵌入,因此移除链接只会删除点击目标。
驱动 PDF 展平的真实工作流
- 通过 CM/ECF 和类似系统进行法院电子归档。 美国联邦法院系统要求可填写的 PDF 在上传到其电子案件归档系统 CM/ECF 之前进行展平。原因是 CM/ECF 单独存储 PDF 和表单数据,而可填写表单一直是混淆、数据丢失和字段损坏工单的反复出现的来源。多个地区法院发布了关于如何展平的明确说明。加拿大、英国和欧盟法院中的类似系统适用相同规则。标准流程是填写表单、展平,然后上传展平的副本。
- 对现有字段处理不完美的电子签名平台。 DocuSign 和 Adobe Sign 都必须对上传的 PDF 上的 AcroForm 字段做些处理,转换到他们内部的签名字段表示有时会丢失数据、破坏对齐或字段命名错误。Adobe Sign 明确提供了「上传时展平」开关,以预防转换错误。在这里预展平让你控制什么被固化,而不是把这个决定交给签名平台。
- 归档已签署的合同和企业记录。 法务团队在长期归档之前展平已签署的合同,这样后续访问合同时不会有修改表单数据的机会。展平使这些值成为页面永久内容的一部分。对人事记录、已填好的报税表和任何需要在未来阅读软件升级后保持语义不变的合规文件同样常见。
- PDF/A 归档转换。 PDF/A-1(2005 年的归档标准)不允许透明度、嵌入式多媒体、JavaScript 或加密内容,并强烈倾向于没有 AcroForm 字段,基于这样的理论:归档文档不应依赖未来阅读器正确实现表单语义。在 PDF/A-1 转换之前展平是标准流程。PDF/A-2 和更高版本放宽了其中一些限制,但仍然倾向于展平的表单以确保归档可靠性。
- 打印和打印为 PDF 的工作流。 一些打印驱动程序对填好的表单字段处理不一致,特别是当 PDF 在一个阅读器中填写并从另一个阅读器中打印时(macOS 上的 Preview 读取 Acrobat 填写的 PDF 是教科书案例)。在打印之前展平消除了阅读器之间的差异:展平时屏幕上的外观流就是最终落在纸上的外观。
- 在收件人不应能够编辑时共享填好的表单。 PDF 看起来仍像表单,但字段无法清空,复选框无法取消勾选,值也无法编辑。只读字段标志存在以达成相同目的,但展平更持久:阅读器无法像有时忽略只读标志那样选择性地忽略字段的缺失。
常见陷阱及其含义
- 输出在原本有填好值的地方有空字段。 PDF 写入时设置了
/NeedAppearances true,从未生成 widget 外观流;阅读器每次打开文件时都会即时重新生成,因此值可见但未持久化。修复方法是在展平之前重新生成外观。本工具会自动这样做,但一些其他展平实现(包括一些命令行工具)跳过重新生成,从带有/NeedAppearances true的源文件中产生空字段的 PDF。 - 有些字段展平了但其他没有。 表单是 AcroForm 和 XFA 的混合,或纯 XFA。AcroForm 字段会展平;XFA 字段需要 Adobe 的工具,因为 XML 驱动的布局无法由其他库渲染。修复方法要么是在 Adobe Acrobat 中打开 PDF 并执行「另存为其他, Reader 扩展 PDF」以转换为 AcroForm,要么是接受 XFA 字段将保持交互。来自加拿大政府服务和德国税务机关的文件仍然经常是纯 XFA。
- 展平后字体看起来略有错位。 表单的外观流在
/DA默认外观字符串中按名称引用了字体,但字体未嵌入;PDF 阅读器在显示时替换了系统字体,展平固定了这个替换。这在拥有相同回退的阅读器中产生视觉正确的文本,在没有的阅读器中产生视觉不同的文本。修复方法是用嵌入的 Helvetica 展平,pdf-lib 默认这样做;在病态情况下,源 PDF 需要在展平之前嵌入字体。 - 数字签名现在无效。 这是设计使然。数字签名是在文档字节范围上计算的加密哈希,因此任何结构性更改(包括展平)都会使其失效。如果你打算保留签名,不要展平。如果你打算展平,在签名后,而不是之前。绘制的签名图像只是图形,完整地通过展平,但它本来就没有携带加密验证,只是视觉声明。
- 展平后的 PDF 与原始大小相同或更大。 展平有时会增加文件大小。外观流引用的嵌入字体现在必须包含在页面资源中,而不是作为表单默认值,而 pdf-lib 不会跨页面积极地去重字体子集。差异通常很小(不到 10%),但并不总是减少。展平的目的是结构性的,不是压缩。要减小大小,通过 免费在线 PDF 压缩 运行展平的 PDF。
- 表单字段预览正常,但展平后消失。 字段设置了将其标记为 Hidden 或 NoView 的
/F标志位(PDF 规范的注释标志)。隐藏字段按定义没有可绘制的外观,因此展平它们在页面上不产生任何内容。这是正确行为,但如果你不知道字段被隐藏,会感到意外。在 Adobe Acrobat 的表单编辑模式中检查 PDF,看看哪些字段被标记为隐藏。
仅浏览器与云端展平
每个云端 PDF 展平服务(Smallpdf、ILovePDF、PDF24 web、Adobe Acrobat Online、Sejda、DocHub 以及十几个较小的)都将你的 PDF 上传到运营商的服务器,在那里运行展平,然后将展平后的副本作为下载返回。PDF 通过公共互联网以 TLS 加密传输,根据运营商不同在其存储中停留几分钟到几天的时间窗口,由运行在运营商基础设施上的运营商 PDF 库展平,然后被删除。隐私政策通常承诺在几小时到一天内删除、传输中使用 TLS,以及(对于较大运营商)经 ISO/IEC 27001 认证的基础设施。运营商有商业理由遵守这些承诺。但他们也有日志、备份快照和事件响应数据流,这些一般不在删除承诺的覆盖范围内。
本工具不上传 PDF。pdf-lib 代码在你的浏览器标签页中运行,通过 File API 接收文件字节,在 JavaScript 引擎中执行展平,将展平的字节作为 Blob 返回到同一标签页。你可以证明没有上传:在点击「展平」之前打开「网络」选项卡的开发者工具,运行操作,观察是否有任何带有文件内容的请求被触发。pdf-lib 代码在页面加载时从 CDN 加载一次,并被浏览器缓存;展平操作不再发出网络请求。权衡的是功能范围:云服务通常将 OCR、Word/Excel 转换或激进压缩与展平捆绑在一起。这里浏览器端的展平只做展平。对于 OCR 或格式转换,云服务是正确选择;对于隐私态势重要的敏感文档,浏览器才是。
更多常见问题
本工具处理哪些表单类型?
AcroForm 的所有变体:文本字段、复选框、单选按钮、下拉列表、列表框、按钮和签名字段(视觉 widget,不是加密签名)。XFA 表单不受支持,因为 XFA 的动态布局需要 Adobe 的专有 JavaScript 和布局引擎。如果你的表单只有 XFA,展平会成功,但会让表单保持交互;在 Adobe Acrobat 中打开 PDF 并保存为 Reader 扩展 PDF 会将大多数 XFA 表单转换为 AcroForm 等效物,然后本工具可以将其展平。
我能只展平一页或只一个字段吗?
不能。本工具展平整个文档。选择性展平(一次一个字段或一次一页)需要 Adobe Acrobat Pro 或从自定义脚本调用的开发库。对于大多数工作流,无论如何整个文档的展平就是你想要的,因为「有些字段静态,其他可编辑」很少是意图。
这会保留书签、元数据和附件吗?
是的,对于书签(文档大纲)、文档元数据(标题、作者、主题、关键词、创建和修改日期)、嵌入文件和附件、可选内容组(图层)以及非表单内容的带标签 PDF 可访问性结构都会保留。与表单相关的标签随字段一起被移除,这是展平的预期行为。当「展平注释」未选中时,超链接保留;当两个选项都选中时,Link 注释热点也会被移除(可见的下划线文本保留)。
密码保护的 PDF 怎么办?
展平无法在加密的 PDF 上运行:pdf-lib 需要读取表单结构,而读取被解密所阻止。先用 免费在线 PDF 解锁 解锁 PDF,然后展平。如果你希望展平输出受密码保护,之后通过 PDF 密码保护 运行它。三步骤的解锁、展平、保护序列是「完成并重新保护」归档流水线的标准流程。
这与打印为 PDF 一样吗?
实际上相似,结构上不同。打印为 PDF 通过操作系统的打印流水线对页面进行光栅化或重新强加,通常会作为副作用展平字段,但也会重新编码图像、以不同的子集重新嵌入字体,有时会更改页面大小或边距。本工具的展平直接操作 PDF 对象结构,精确保留原始图像、字体和页面几何。当你想要一个新的光栅化副本时使用打印为 PDF;当你想要仅移除了表单结构的原始 PDF 时使用展平。
有桌面或命令行等效物吗?
pdf-lib 在 Node.js 中运行(npm install pdf-lib),展平调用相同:await form.flatten() 然后 await pdfDoc.save()。对于命令行,qpdf 有部分等效物(qpdf --flatten-rotation --generate-appearances),它处理外观重新生成但不处理表单移除步骤;pdftk 的 flatten 操作处理移除但跳过外观重新生成。Adobe Acrobat Pro 的「展平字段」菜单项原生处理两个步骤,是行为对等的参考。