无法使用 Adobe Reader 打开自己创建的 pdf

问题描述 投票:0回答:2

这是我自己创建的一个 hello world Pdf。它的外部参照信息存储在 XRefStm 中。如何用 Adobe Reader 打开它。有人可以告诉我原因吗?预先感谢您!

罗伊邓。

%PDF-1.7
1 0 对象 << /Length 94 >>流
BT 10 782 Td /0 50 Tf 50 TL(你好)'(世界)'(OK)Tj(世界)' Tj ET
endstream endobj
2 0 对象 << /Count 1 /Kids 3 0 R /Type /Pages >> 结束对象
3 0 obj [ 4 0 R ] endobj
4 0 对象 << /Contents 5 0 R /MediaBox 6 0 R /Parent 2 0 R /Resources 10 0 R /Type /Page >> 结束对象
5 0 obj [ 1 0 R ] endobj
6 0 对象 [ 0 0 612 792 ] 结束对象
7 0 对象 << /BaseFont /Helvetica /Encoding /MacRomanEncoding /Subtype /Type1 /Type /Font >> 结束对象
8 0 对象 << /0 7 0 R >> 结束对象
9 0 obj [ /PDF /Text ] endobj
10 0 对象 << /Font 8 0 R /ProcSet 9 0 R >> 结束对象
11 0 对象 << /Pages 2 0 R /Type /Catalog /PageLayout /OneColumn >> 结束对象
12 0 对象 << /Type /XRef /Index [0 11] /W [1 4 1] /Filter /ASCIIHexDecode /Size 12 /Length 144 /Root 11 0 R >>流
00 00000000 00
01 00000009 00
01 0000009A 00
01 000000D1 00
01 000000EA 00
01 0000014B 00
01 00000164 00
01 00000183 00
01 000001E5 00
01 00000203 00
01 00000221 00
01 00000252 00
尾流
结束对象
开始参考
667
%%EOF

pdf stream cross-reference
2个回答
0
投票

我尝试用 pdftk

修复此代码
pdftk 1.pdf output fixed.pdf
Error: Failed to open PDF file: 
   1.pdf
Errors encountered.  No output created.
Done.  Input errors, so no output created.

然后我尝试使用cpdftk(来自相干),并获得了更多信息

#  cpdftk 1.pdf output fixed.pdf
cpdf could not read the file. Technical details follow:

Could not read x-ref table

最后我尝试使用 Multivalent.jar

修复文件

和多价修复的pdf(我附上结果)


0
投票

[稍后编辑]以下答案
TL;博士
PDF ISO 标准规定您可以根据多个文件管理器(包括 /Filter /ASCIIHexDecode)或未过滤的二进制或文本索引使用外部参照流。因此,Adobe 展示了一种适用于许多阅读器的“典型”方法,但不适用于他们自己的阅读器,正如暗示的那样,他们只接受 Acrobat Readers 版本 6.0 (%PDF-1.5) 及以上版本中的未过滤或“/Filter/Flated”。

第一个明显的错误是文本 PDF 中的所有地址通常都是十进制值,因此外部参照中通常不会有任何 ASCII 文本字母,因此有关外部参照结构的常见外部参照错误消息无法理解。

无法读取外部参照表

这完全取决于这里使用的将

obj 12
编码为十六进制索引的方法,这并没有错,因为外部参照可能是 ANSI 字符串表或编码的外部参照流,但为了“兼容性”永远不应该同时看到(混合外部参照表和外部参照流

01 0000009A 00
01 000000D1 00
01 000000EA 00
01 0000014B 00

我无法找到任何使用此混合方法成功在 Adobe Standalone Viewers 中显示其结构的文件(但它可以在 MS Edge 中的最新“由 Adobe Acrobat 提供支持”中工作!)格式标志可能倾向于 /W [1 2 1] 或 [1 2 2] 当然,这种方法经常失败,请参阅类似的问题 在 Chrome 中呈现但不在 Acrobat 中呈现的 PDF 在许多此类情况下,常见的最终评论是

自从我成功测试以来,压缩可以是无压缩(只是二进制),也可以是带有预测器的 FlateDecode,但对于 Acrobat 来说没有其他压缩。即 ASCIIHexDecode RM中演示的在Adobe Acrobat DC阅读器/查看器/编辑器中无法使用?.

正常的 /Flate 编码的外部参照会是这样的,但更难遵循

12 0 obj
<</DecodeParms<</Columns 4/Predictor 12>>/Filter/FlateDecode/Length 57/Root 1 0 R/Size 12/Type /XRef/W [1 2 1]>>
stream
xÚcb``øÏÄÈÀÏÈÄÀÁÀÄÈ0—é?÷-&Ưj 1â?wòo&ƯsÙÅxÕ~  zoW
endstream
endobj

许多(但不是全部)PDF 查看器可以解决不良的外部参照索引,即使缺失。然而,通常的最佳方法是使用简单的非编码十进制外部参照索引和预告片,如下所示。许多文件修复程序倾向于解压缩这些编码以将其重建为这种更简单的未编码格式。我测试的所有观众都接受了这一点。请注意 EOL 字符可能会受到简单剪切和粘贴的影响(因此 Windows 可能会更改这些文本地址。)

%PDF-1.7
1 0 obj <</Length 67>> stream
BT 10 782 Td /0 50 Tf 50 TL (Hello)' (World)' (OK)Tj (World)' Tj ET
endstream endobj
2 0 obj <</Count 1/Kids 3 0 R/Type/Pages>> endobj
3 0 obj [4 0 R] endobj
4 0 obj <</Contents 5 0 R/MediaBox 6 0 R/Parent 2 0 R/Resources 10 0 R/Type/Page>> endobj
5 0 obj [1 0 R] endobj
6 0 obj [0 0 612 792] endobj
7 0 obj <</BaseFont/Helvetica/Encoding/MacRomanEncoding/Subtype/Type1/Type/Font>> endobj
8 0 obj <</0 7 0 R>> endobj
9 0 obj [/PDF/Text] endobj
10 0 obj <</Font 8 0 R/ProcSet 9 0 R>> endobj
11 0 obj <</Pages 2 0 R/Type/Catalog/PageLayout/OneColumn>> endobj
xref
0 12
0000000000 65536 f 
0000000009 00000 n 
0000000124 00000 n 
0000000174 00000 n 
0000000197 00000 n 
0000000287 00000 n 
0000000310 00000 n 
0000000339 00000 n 
0000000428 00000 n 
0000000456 00000 n 
0000000483 00000 n 
0000000529 00000 n 
trailer
<</Size 12/Root 11 0 R>>
startxref
596
%%EOF

结果

作为减少所需计算量的一种方法,通过对 5 个对象进行一些调整,可以使相同的 11 个对象变得更简单、更小:-

%PDF-1.7
1 0 obj <</PageLayout /OneColumn/Pages 2 0 R/Type/Catalog>> endobj
2 0 obj <</Count 1/Kids [ 3 0 R ]/Type/Pages>> endobj
3 0 obj <</Contents 5 0 R/MediaBox [ 0 0 612 792 ]/Parent 2 0 R/Resources<</Font<</0 4 0 R >>/Procset[/PDF/Text]>>/Type/Page>> endobj
4 0 obj <</BaseFont /Helvetica/Encoding/MacRomanEncoding/Subtype/Type1/Type /Font>> endobj
5 0 obj <</Length 84>> stream
q BT 50 TL /0 50 Tf 10 782 Td T* (Hello) Tj T* (World) Tj (OK) Tj T* (World) Tj ET Q q Q
endstream
endobj

xref
0 6
0000000000 65536 f 
0000000009 00000 n 
0000000076 00000 n 
0000000130 00000 n 
0000000264 00000 n 
0000000355 00000 n 
trailer
<</Size 6/Root 1 0 R>>
startxref
492
%%EOF
© www.soinside.com 2019 - 2024. All rights reserved.