我刚刚发现规范中的文章Adobe论坛:简单文本字符串示例已损坏。,因此我对查找纯文本源PDF示例感兴趣。
因此,通过该帖子,我最终发现:
PDF 1.7规范在第699页上有附录“ _Annex H(参考)示例PDF文件”;从那开始,我想尝试“ H.3简单文本字符串示例”(“经典Hello World”)。
因此,我尝试将其保存为hello.pdf(从PDF32000_2008.pdf复制时,请注意_except注释,您可能会得到“ %PDF-1. 4”-即在后面插入一个空格1.,必须将其删除_):
hello.pdf
%PDF-1. 4
1.
%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 /Font << /F1 7 0 R >> >> >> endobj 5 0 obj << /Length 73 >> stream BT /F1 24 Tf 100 100 Td ( Hello World ) Tj ET endstream endobj
…并且我正在尝试打开它:
evince hello.pdf
…但是,evance无法打开它:“无法打开文档/ PDF文档已损坏”;并且:
Error: PDF file is damaged - attempting to reconstruct xref table... Error: Couldn't find trailer dictionary Error: Couldn't read xref table
我也检查qpdf:
qpdf
$ qpdf --check hello.pdf WARNING: hello.pdf: file is damaged WARNING: hello.pdf: can't find startxref WARNING: hello.pdf: Attempting to reconstruct cross-reference table hello.pdf: unable to find trailer dictionary while recovering damaged file
我在哪里错呢?
非常感谢您的任何回答, 干杯!
您应该在文件末尾附加一个(在语法上正确的)xref和trailer节。这意味着:即使未正确说明字节偏移量,PDF中的每个对象也需要在外部参照表中一行。然后,Ghostscript,pdftk或qpdf可以重新建立正确的外部参照并呈现文件:
xref
trailer
[...] endobj xref 0 8 0000000000 65535 f 0000000010 00000 n 0000000020 00000 n 0000000030 00000 n 0000000040 00000 n 0000000050 00000 n 0000000060 00000 n 0000000070 00000 n trailer <</Size 8/Root 1 0 R>> startxref 555 %%EOF