如果我在十六进制编辑器中查看 PDF 文件,我会看到以下两行:
%PDF-1.6
%öäüß
Run Code Online (Sandbox Code Playgroud)
如规范中所述,第一行是 PDF 版本号。
第二行的意义是什么?我在规范中找不到它。
在 PDF 文件中%开始注释,所以它只是一个无用的字符串。许多 PDF 生成器使用它来防止文件被错误程序弄乱
但是如何?一些应用程序通过检查第一个数据块(通常为 512、1024 或 2048 字节)并测量不可打印或无效字符的百分比,以启发式方式检查文件是文本还是二进制文件。其他一些不是8-bit clean。因此,建议在前 512 个字节中至少放置 4 个值大于 127 的字节,以强制这些应用程序将文件识别为二进制文件。否则会发生一些不好的事情,例如在 CRLF 和 LF 之间转换、截断最高位或删除无效的 UTF-8 字节序列(如果文件被识别为 UTF-8 文本)
下面是一些使用不可打印字符的 ASCII 字符(注意“.”点),这些字符通常用于告诉某些软件产品该文件包含二进制数据,不应将其视为 7 位 ASCII文本
https://resources.infosecinstitute.com/pdf-file-format-basic-structure/#gref
它实际上是由 PDF 标准推荐的
注意: 如果 PDF 文件包含二进制数据,大多数情况下(参见第 3.1 节,“词法约定”),建议标题行后紧跟包含至少四个二进制字符的注释行 - 即代码为 128 或更大。这确保了文件传输应用程序的正确行为,这些应用程序检查文件开头附近的数据以确定是将文件内容视为文本还是二进制。
https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf
如果 PDF 文件包含二进制数据,大多数情况下(参见 7.2,词汇约定“),标题行后面应紧跟包含至少四个二进制字符的注释行 - 即代码为 128 或更大的字符。这确保文件传输应用程序的正确行为,这些应用程序检查文件开头附近的数据,以确定是将文件内容视为文本还是二进制。
https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf
我读过的一些关于 PDF 的消息来源说,有些程序仍然不相信该文件是没有零字节的二进制文件,但不幸的是,您不能在 PDF 注释中嵌入零。我现在找不到它们,所以我稍后会引用
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |