PDF规范中的最小PDF示例

PDF规范中的最小PDF示例,pdf,pdf-generation,Pdf,Pdf Generation,我从中获取PDF规范中的最小PDF示例,将其复制到记事本,将文件重命名为扩展名为.PDF 我可以用其他PDF查看器(PDF XChange、苏门答腊PDF、MuPDF)打开它。但是当我用AdobeReader打开它时,它说文件坏了 我不确定其他观众是否将此“损坏”文件视为空白文件 该文件应该显示一个空白页,因为这是一个最小的示例 事实上,我修改了最小示例。因为当我将它从PDF规范复制到记事本,并用十六进制编辑器打开.txt文件时,我看到.txt文件中有一行新行给了我2个空间。比如说, 1 0 o

我从中获取PDF规范中的最小PDF示例,将其复制到记事本,将文件重命名为扩展名为.PDF

我可以用其他PDF查看器(PDF XChange、苏门答腊PDF、MuPDF)打开它。但是当我用AdobeReader打开它时,它说文件坏了

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

该文件应该显示一个空白页,因为这是一个最小的示例

事实上,我修改了最小示例。因为当我将它从PDF规范复制到记事本,并用十六进制编辑器打开.txt文件时,我看到.txt文件中有一行新行给了我2个空间。比如说,

1 0 obj
<< /Type /Catalog
j
endobj 2 0 obj>endobj 3 0 obj>endobj 4 0 obj>>endobj 5 0 obj>stream…页面标记操作符…endstream endobj 6 0 obj[/PDF]endobj外部参照0 7 0000000000 65535 f 000000000 9 00000 n 00000000 74 00000 n 0000000 119 00000 n 0000000 176 00000 n 0000000 295 00000 n 0000000 373 00000 n拖车>开始外部参照395%%EOF

首先:当您“复制”PDF规范中的示例时,很可能发生了一些事情,导致您的副本无法按预期工作:

  • …您没有通过在文本编辑器中重新键入示例来“复制”,但是
  • …您使用了复制粘贴,使用PDF作为源文件
根据文本编辑器的不同,该方法可能导致换行规则的转换从[cr]+[lf]更改为[cr],反之亦然。这反过来意味着对象“目录”(“
xref
”-表)中的字节偏移量编号不再有效

您发布的PDF源代码的另一个问题是它现在根本不包含任何换行符。有些观众可能仍然能够默默地解析这个东西,但并非所有人都能。这当然是违反规范的,因为根据规范,在第7.5.2章中明确指出

“PDF文件的第一行应该是由5个字符%PDF组成的标题,后面是格式1.N的版本号,其中N是介于0和7之间的数字

您的标题违反了该规则

此外,
5 0 obj
中的“流”不是任何有效的PDF代码,它只是占位符文本(
…页面标记操作符…
)。当一些观众遇到这种“垃圾”时,可能会倾斜

最后,您的
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
%PDF-1.4
10 obj
>
endobj
20 obj
>
endobj
30 obj
>
endobj
40 obj
>>
endobj
50 obj
>
流动
…页面标记运算符…
尾流
endobj
60 obj
[/PDF]
endobj
外部参照
0 7
0000000000 65535 f
000000000 900万n
0000000074000000N
0000000 11900000n
0000000 17600000N
0000000 295 00000 n
0000000 376 00000n
拖车
>
起始外部参照
394
%%EOF
%%%PDF-1.4 1 0 obj>endobj 2 0 obj>endobj 3 0 obj>endobj 4 0 obj>>endobj 5 0 obj>stream…页面标记操作符…endstream endobj 6 0 obj[/PDF]endobj外部参照0 7 0000000000 65535 f 000000000 9 00000000 74 0000000 0119 0000000 0000000 1760 0000000 0000000 2950 0000000 373 00000 n拖车>startxref 395

谢谢Kurt,但是为什么startxref的值是394而不是396。这个值不是应该是这个文件中
xref
中字符“x”的字节偏移量吗?在十六进制编辑器中它是396。但是有了396,文件被破坏了,394可以工作。我不知道原因。@user565739:如果=this.pdf,你应该运行
dd bs=1 skip=394。这意味着y您在转储文件时跳过了前394个字节。现在,输出应该以一行的
xref
开头。当我复制/粘贴此文件时,我必须将“页面标记运算符”周围的单个字符“…”更改为三个字符“。。。“以及从394到398的startxref。我怀疑,当我复制/粘贴单个字符“…”时,该字符被咀嚼。通过扩展到流两边的三个单独的“.”,这又增加了4个字节,这使我从外部参照表的开头394移动到398。当我尝试添加一些内容时,我只会得到一个空白页,例如,使用“BT 10 50 Td(AwaY!)Tj ET”(指令和开始/结束标记在单独的行中)对象5的as流-调整相应字节偏移量后。预览打开它很好,但只显示一个空白页。我在OX 10.6上使用预览版本5。8@MASL:可以在此处找到更多(手工编码的)PDF示例:。
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
%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-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