简体中文

文档 · PDF 工具包

PDF 简史:从 Adob​​e 的 Camelot 项目到 ISO 32000

· 背景

pdf 文件格式 浏览器处理

与现代浏览器操作相关的文档格式结构
原始 ToolAcre 矢量图

PDF 最初是为了使文档在每个屏幕和打印机上看起来都相同,最终成为一个开放的 ISO 标准。这篇文章追踪了这条路径,并解释了为什么该格式的设计让浏览器今天可以重写它。

存储库演示了可移植页面渲染,而不是 PDF 的早期历史

提供的存储库证明了一个实用的属性:一个 PDF 可以在浏览器环境中解析和呈现,然后重写到另一个 PDF 中,同时保留可见的页面内容。这种可移植性在合并、分割、旋转、水印和转换代码中可见,而不需要关于发明该格式的历史声明。

页面可以携带符合库解释的尺寸、旋转、资源和绘图指令。 ToolAcre 依赖 pdf-lib 进行编写,依赖 pdf.js 进行渲染。这些依赖关系展示了一种可行的结构化格式,而存储库不记录早期的打印机、字体或文字处理器历史记录。

项目 Camelot 历史超出了提供的实现源

该工作簿命名了 Camelot 并提出了原始设计愿景,但所需的源文件均未证实这些事实。重复它们就会把大纲变成未被引用的历史。因此,本节标记了证据边界,而不是制造日期、报价或项目动机。

寻找历史的读者应查阅主要的 Adob​​e 出版物或相关标准记录。产品源可以回答当前代码的作用:它接受选定的文件,解析页面,复制或转换它们,并在本地序列化输出。它不能仅仅因为它在 PDF 上运行而验证公司的起源故事。

省略了规范发布日期和 ISO 历史,没有引用的标准来源

相同的边界适用于有关专有和开放规范转换或特定 ISO 发布年份的声明。这些是标准历史陈述,需要权威的外部引用。该任务提供了实施和配置文件,而不是标准或其机构时间表。

这里可验证的是库边界的互操作性。 pdf.js 可以解释缩略图和光栅输出的页面内容; pdf-lib 可以创建文档、复制页面、设置旋转、绘制标记和嵌入图像。生成的文件以普通 PDF 形式提供给独立查看者打开。

逐版本功能历史记录位于存储库证据之外

加密、透明度、标记或兼容性添加的逐版本列表同样需要规范源。该工具包仅公开它如何处理某些现有功能:拒绝加密文件、页面复制输出中不保留注释和表单以及文本水印使用内置拉丁字体。

这些限制表明“PDF 支持”从来都不是一种二元属性。应用程序支持选定的操作和结构。观看者可以渲染编辑器不保留的内容,并且编辑器可以编写新文档而不携带每个子系统。产品文档应该命名这些边界,而不是调用格式历史记录作为保证。

为什么设计对于浏览器工具很重要 - JavaScript 可以在本地解析和重写的自描述对象结构

浏览器工具之所以有效,是因为库可以将字节解析为结构化文档,并通过有意的操作创建新字节。将副本页面合并到新文档中; split 每个范围创建一个新文档;旋转调整附加页面元数据;水印绘制内容;图像转换要么光栅化页面,要么嵌入准备好的图像。

工人在不改变其本地性质的情况下使大多数变革做出响应。 PDF-to-image 划分职责:pdf.js 通过其工作程序进行解析,而 canvas 编码保留在主线程上。然后,浏览器将结果打包成 Blob 和 ZIP 以便本地下载,而不是依赖远程转换服务。

档案配置文件和其他一致性子集需要外部标准源

工作簿名称 PDF/A 和其他配置文件,但提供的源不包括验证器、一致性声明或标准文本。该工具包不应被视为保存或生成档案配置文件。新的序列化可以更改可见页面之外的属性,并且在记录策略需要时必须单独验证。

这一遗漏在操作上很重要。合并后成功打开的文件并不证明存档、可访问性或印刷制作一致性。使用专门的验证器和主要配置文件来解决这些问题。 ToolAcre 支持的承诺仍然是在规定的限制下进行页面级转换,而不是根据外部规范进行认证。

本文保留工具包源代码中验证的行为

本文并不尝试压缩替代正式标准或历史书。它省略了不受支持的里程碑、功能年表以及有关观看者处理未知版本的原因的声明。该存储库仅对正在审查的工具包行为具有权威性。

这种克制改进了技术写作。读者准确地了解到哪些事实可以指导当今的使用:文件保留在本地、适用硬上限、工作人员执行大部分转换、光栅化丢失文本、页面副本省略主要文档结构以及加密输入停止。这些事实都不需要虚构的历史桥梁。

可以在本地进行结构化页面操作;没有声称历史因果关系

结构化 PDF 页面可以在本地解析和重写; ToolAcre 直接演示了这一点。它没有展示使这种格式成为可能的历史原因,并且本文也没有假装不是这样。基于来源的散文应该更喜欢狭隘的真实解释,而不是优雅的无支持的叙述。

使用该工具包作为现代页面操作的实际示例,然后查阅权威标准和档案来源以了解时间顺序或一致性。将实施证据与背景研究分开使两者都有用:代码解释了当前的行为,而适当的历史来源可以在其他地方确定日期和机构决策。这种划分还可以保持产品文档的可维护性,因为只要依赖项或操作代码发生变化,就可以重新测试实现声明。它可以防止未来的代码更新仅仅因为两者碰巧提到相同的文件格式而看似验证不相关的历史断言。后来的历史文章可以通过主要引用来添加这些事实,而无需更改此以实施为中心的说明或削弱其证据标准。