PDF规范中的最小PDF示例

问题描述 投票:11回答:1

我从PDF Specification中获取了PDF规范中的最小PDF示例,将其复制到NotePad,将文件重命名为扩展名。pdf

我可以用其他PDF查看器打开它(PDF-XChange,SumatraPDF,MuPDF)。但是,当我使用Adobe Reader打开它时,它表示文件已损坏。

我不确定其他观众是否将此“损坏”的文件视为空白文件。

由于这是一个最小的示例,因此该文件应该显示一个空白页。

实际上,我修改了最小的示例。因为当我将其从PDF规范复制到记事本,并通过十六进制编辑器打开.txt文件时,我看到。txt文件中的新行给了我2个空格。例如,

1 0 obj
<< /Type /Catalog

给我(在十六进制编辑器中)

1 0 obj  << /Type /Catalog

是(以十六进制值表示)

31 20 30 20 6F 62 6A 0D 0A 3C 3C 20 2F 54 79 70
65 20 2F 43 61 74 61 6C 6F 67

j<之间的两个空格是0D 0A

因此,我不在记事本中添加新行,并修改xref部分中的值。

下面是完整的代码。

您知道此示例出了什么问题吗?为什么Adobe Reader说它坏了?这是因为我在xref中输入了错误的值吗?

%PDF-1.4 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [4 0 R] /Count 1 >> endobj 4 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] /Contents 5 0 R /Resources << /ProcSet 6 0 R >> >> endobj 5 0 obj << /Length 35 >> stream … Page-marking operators … endstream endobj 6 0 obj [/PDF] endobj xref 0 7 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000119 00000 n 0000000176 00000 n 0000000295 00000 n 0000000373 00000 n trailer << /Size 7 /Root 1 0 R >> startxref 395 %%EOF
pdf pdf-generation
1个回答
17
投票

First:从PDF规范“复制”示例时,很可能发生了一些事情,使您的副本无法正常工作:

  • ...您没有通过在文本编辑器中重新键入示例来“复制”,但是
  • ......您使用了复制粘贴,使用PDF作为源文件。

[取决于您的文本编辑器,该方法可能导致换行约定从[cr] + [lf]更改为[cr],反之亦然。这又意味着对象“目录表”(“ xref”表)中的字节偏移号不再有效。

另一个问题与您发布的PDF源代码有关,它现在不包含任何换行符全部。一些观众也许仍然可以默默地解析事物,但并非全部。这当然违反规范,因为根据规范,在第7.5.2章中明确指出:

“ PDF文件的第一行应为标头,由5个字符组成,%PDF–后跟版本号为1.N,其中N为0到7之间的数字。

您的标题违反了该规则。

也, 5 0 obj中的“流”不是任何有效的PDF代码,它只是占位符文本(… Page-marking operators …)。一些观众在遇到这种“垃圾”时可能会倾斜。

最后,您的startxref值不正确。

所以这是一个有效的文件。我在文本编辑器中对其进行了修复,并在%%EOF之后将您的原始代码作为注释,以进行比较和参考:

%PDF-1.4
1 0 obj
<< /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >>
endobj
2 0 obj
<< /Type Outlines /Count 0 >>
endobj
3 0 obj
<< /Type /Pages /Kids [4 0 R] /Count 1 >>
endobj
4 0 obj
<< /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] /Contents 5 0 R /Resources << /ProcSet 6 0 R >> >>
endobj
5 0 obj
<< /Length 35 >>
stream
… Page-marking operators …
endstream 
endobj
6 0 obj
[/PDF]
endobj
xref
0 7
0000000000 65535 f 
0000000009 00000 n 
0000000074 00000 n 
0000000119 00000 n 
0000000176 00000 n 
0000000295 00000 n 
0000000376 00000 n 
trailer 
<< /Size 7 /Root 1 0 R >>
startxref
394
%%EOF

%% %PDF-1.4 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [4 0 R] /Count 1 >> endobj 4 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] /Contents 5 0 R /Resources << /ProcSet 6 0 R >> >> endobj 5 0 obj << /Length 35 >> stream … Page-marking operators … endstream endobj 6 0 obj [/PDF] endobj xref 0 7 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000119 00000 n 0000000176 00000 n 0000000295 00000 n 0000000373 00000 n trailer << /Size 7 /Root 1 0 R >> startxref 395
© www.soinside.com 2019 - 2024. All rights reserved.