苹果公司在 macOS Sonoma 中终止了对 PostScript 文件的直接支持,但你仍可使用 PDF Debugger 窥探 PDF 文件的内部内容。
PDF 是 Adobe Systems 在 20 世纪 80 年代初发明的一种网络通用文档格式。当时,激光打印机刚刚兴起,苹果公司的 LaserWriter 打印机和 Macintosh Plus 成为世界上最早的商用桌面出版系统之一。
PostScript - PDF 的起源
PostScript 是一种描述页面如何在屏幕或纸张上布局的语言。尽管 PostScript 最初用于激光打印机的 ROM,但后来被用于史蒂夫-乔布斯的第二家公司 NeXT Inc.
NeXT 的操作系统 NeXTStep(后称 OpenStep)通过使用 Display PostScript 在屏幕上显示文本、图形和图像,克服了早期在屏幕上的限制。
虽然 Adobe 最初的 PDF 文件标准在技术上并不是纯粹的 PostScript,但它却是由 PostScript 衍生而来的。在 2000 年发布的 1.3 版本中,Adobe 增加了对 PostScript 语言第 3 级图像模型的支持。它还支持最初的、现已失效的 Adobe 字体标准 Type 1。
PDF 和 .ps 文件
几年后,Adobe 推出了便携式文档格式,即 PDF,它已成为文档和网络标准。PDF 最初是 Adobe 的专有格式,但在 2008 年被标准化为 ISO 32000。
该标准于 2020 年再次修订。
由于当时 Adobe 的管理层认为没有必要使用 PDF,而 PostScript 仍是图形设计、桌面出版和印刷领域的主流页面描述语言,因此 PDF 几乎没有受到重视。
PDF 还可以嵌入表格、数字签名、三维对象、视频和大量其他内容。PDF 文件可以加密并用密码保护,不过 Adobe 公司最近宣布终止对原始 PostScript 字体格式(Type 1 字体)的支持。
在现在的计算机上打开 PDF 文件时,应用程序会使用操作系统或库代码来读取 PDF 文件的指令。它将指令转换为本地绘图例程,以便在操作系统上显示。
对于 macOS 和 iOS,这就是 Quartz 框架,其中包含处理 PDF 文件的 API,以及为 PDF 显示提供图形绘制上下文的 Core Graphics 框架。Apple 拆分了原始 Quartz 框架的功能,因此 Core Graphics 可以处理大部分绘图基元和上下文,而 Quartz 则负责图像、PDF 操作和快速预览功能。
预览、打印和查看
苹果公司的预览应用程序和打印系统过去可以直接打开、显示和打印包含 PostScript 代码的 .ps 文件,但 macOS 14 Sonoma 停止了这项支持。几十年来,预览版一直支持 PDF 文件。
你仍然可以在 Mac 上查看 .ps 文件的原始 PostScript 内容,只需将它们放到 TextEdit 应用程序中即可。它们会以文本文件的形式打开,你可以直接阅读 PostScript。
尽管大多数激光打印机的 ROM 中不再包含 PostScript 解析器,但一些消费级激光打印机还是包含 PostScript 仿真器,如 Brother 公司的 BR-Script,它可以使用打印机的本地渲染功能接收、解码和打印 .ps 文件。
您可以使用 Mac 十六进制编辑器工具(如 HexFiend 或 HexEdit)查看 PDF 文件内部的原始内容。十六进制编辑器旨在显示代码和二进制文件内容,但如果你了解文件格式,也可以用来查看任何类型的文件内容。
但对于包括 PDF 文件在内的许多文件来说,原始数据的编码或存储方式可能无法让人阅读。因此,要理解十六进制编辑器中的内容,就需要熟悉文件格式的内部结构。
就 PDF 文件而言,它们通常以"%PDF "开头,以"%EOF "结尾。
使用 PDF Debugger
大多数 PDF 文件都是由层次分明的树状结构组成。树上的一些节点由子节点组成,子节点进一步描述父节点,而其他节点(叶节点)只包含文件的信息,如页数、类型、长度、创建者详细信息和其他信息。
PDF 文件可能会损坏并包含无效的树数据,这在大多数情况下会导致文件无法阅读。如果你认为自己的 PDF 文件已损坏,或者只是想查看 PDF 的树形信息,现在有了一种简单的方法。
PDF Debugger 是乌克兰人 Yevhenii Hyzyla 开发的一款简单的网络工具,可以让你做到这一点。它使用简单:只需将 Mac Finder 中的任何 PDF 文件拖放到页面上的拖放窗格中,它就会读取并显示该文件的 PDF 树信息。
- PDF Debugger 官网:https://pdf.hyzyla.dev/
虽然 PDF 调试器不能显示 PDF 的全部内容,但你仍然可以使用十六进制编辑器或其他原始数据阅读器应用程序来实现这一功能。
其他实用程序可以将 PDF 转换为 .ps 文件,这样你就可以直接读取 PostScript。
PDF 调试器是验证 PDF 文件基本结构的快捷方式。
Hyzyla 还在自己的 GitHub 页面上为 Node.js JavaScript 引擎提供了一个封装库,该库使用了 Google 用 WebAssembly 编写的高性能 PDFium 库: