跳到正文

扁平化PDF

把已填写的表单字段、批注和签名变为页面的固定组成部分——在任何地方看起来都一样,打印可靠,而且无法被编辑或清除。

  • 绝不存储
  • 无需排队,无需等待
  • 无需注册,无水印

使用方法

1

添加PDF

把已填写的表单或带批注的文档拖放到页面上。

2

选择要扁平化的内容

表单字段,批注和签名,或者两者都选——哪部分需要锁定就选哪部分。

3

下载

您会得到一个所有内容都是普通页面内容的PDF。链接仍然有效。

哪些内容会被固化,哪些被有意保留

PDF中的每条批注本身都带有一张自己的“图像”——即外观流——阅读器绘制的就是它。扁平化会把这张图像画进页面自身的内容中,然后删除批注,于是这个标记不再是浮在页面上的东西,而是成为页面的一部分。放置位置是最棘手的环节,这里按照规范本身的规则来处理:外观框经过外观流的矩阵变换,变换后的四角被适配到批注矩形中,再按比例缩放以匹配。省略这一步,正是粗糙的扁平化会让签名大小不对、印章位置略有偏移的原因——这是这类操作中最常见的错误。

有三类批注被有意保留。链接仍然是链接,因为它们没有可固化的外观,而在“扁平化批注”时把一个可用的目录变成无法点击的墨迹,与其说是功能,不如说是破坏。标记为隐藏或不可查看的内容会被完全跳过,因为固化它们会让作者有意隐藏的内容显现出来。而完全没有存储外观的批注也会保持原样,因为没有东西可画——这类外观由阅读器实时生成,在这里凭空造一个,就意味着要猜测作者从未指定过的字体和边框。

复选框或单选按钮存储了多种外观,并记录当前处于哪种状态,所以被固化的是实际正在使用的那个——勾选的框保持勾选,未勾选的则不留任何痕迹。表单字段通过表单处理机制而不是这条路径来处理;如果表单字典格式错误,会被捕获并跳过,而不会连累批注的扁平化一起失败。保存的文件使用对象流,所以尽管加入了内容,它通常还会比原文件略小一些。

如果您需要的是别的

带有加密签名的文档不应在这里扁平化,这并不是工具的缺陷:改写页面内容恰恰是数字签名要检测的行为,所以结果会被正确地报告为已篡改。如果已签名的文件需要锁定其字段,那是另一种操作——把字段标记设为只读,而不是固化它们——qpdf --json-input或一个简短的pikepdf脚本就能做到,而且完全不会触及任何内容流。

如果要批量扁平化,或者处理那些因为文档要求阅读器自行生成而从未生成过外观的表单,pdftk in.pdf output out.pdf flatten和Ghostscript的gs -dPreserveAnnots=false -sDEVICE=pdfwrite -o out.pdf in.pdf都会通过完整的解释器进行渲染,会生成缺失的外观,而不是让字段保持原样。Ghostscript会把链接和其他所有内容一起扁平化,这是一种取舍,而不是改进。

常见问题

为什么要扁平化PDF?

因为填好的表单其实并没有真正“填好”:答案存放在交互式字段中,别的阅读器可能会清除、重新编辑或以不同方式显示它们——有些打印机甚至完全不打印。扁平化让答案成为页面的一部分,您看到的就是收件人看到和打印出来的样子。

扁平化之后还能编辑表单吗?

不能,这正是扁平化的目的。如果以后可能需要修改答案,请保留原始文件——扁平化无法撤销。

会删除我的超链接吗?

不会。链接会被有意保留为可用状态;只有具有可视外观的内容才会被固化。

签名会准确保留在我放置的位置吗?

会。每条批注的外观都按照PDF规范本身规定的方式,从外观框映射到批注矩形进行放置,这正是印章和签名能保持正确大小和位置、不会偏移的原因。

我的PDF会被存储在任何地方吗?

不会。扁平化不存储任何内容——这一点在这里很重要,因为需要扁平化的文档通常是签过字的表单和合同。

小贴士: 数字签名证书不会被保留:扁平化会改写页面内容,按设计这会使加密签名失效。隐藏的批注仍保持隐藏,不会变为可见。没有存储外观的批注(很少见,且效果取决于阅读器)会保持原样。

把这个工具放到您的网站上

博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。