打开经过验证的pdf文件不显示文本

时间:2018-07-07 12:10:12

标签: pdf

this pdf文件已经通过在线pdf工具进行了验证,我也根据Adobe的pdf参考书进行了检查,但是当我打开它时,该文件中没有文本,应该有一行。有人可以帮我解决这个文件中的问题吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

我不知道您使用的是什么验证工具,但是它们是错误的。

如果我在Acrobat中打开文件,然后将其关闭,则Acrobat会“保存更改”。这清楚地表明Acrobat静默修复的文件有问题。

使用Ghostscript打开会显示预期的文本,但会给出1条警告和1条错误:

GPL Ghostscript GIT PRERELEASE 9.24 (2018-03-21)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
   **** Warning:  length of some xref entries is not equal to 20 bytes.
Processing pages 1 through 1.
Page 1
   **** Error: stream operator isn't terminated by valid EOL.
               Output may be incorrect.
Loading NimbusSans-Regular font from %rom%Resource/Font/NimbusSans-Regular... 7545788 5687824 4474868 3160873 3 done.
>>showpage, press <return> to continue<<

所以有两个问题,其中一个很常见。 PDF Reference明确指出,外部参照条目必须正好为20个字节。参见1.7 PDF参考手册的第94页:

  

此行之后是交叉引用条目本身,一个   每行。每个条目正好20字节长,包括   行尾标记。

...

  

字节偏移量是一个10位数字,如果有则用前导零填充   必要,给出文件开头的字节数   到对象的开头。它与世代分离   数字用一个空格隔开。世代号是5位数字,   如有必要,还填充前导零。跟随一代   number是一个空格,关键字n和一个2个字符的行尾   顺序。如果文件的行尾标记是单个字符   (回车符或换行符)之前,   空间;如果标记是2个字符(回车符和   换行),它前面不能有空格。因此,总长度   该条目始终正好是20个字节。

PDF文件的外部参照表中的第一项是19个字节长(我没有检查其余部分)。

我认为第二个错误是导致文本显示问题的错误;内容流看起来像这样:

流BT / F1 24 Tf 100700 Td(abcdef gh ijklmnop)Tj ET结束流

如果使用二进制或十六进制编辑器进行查看,则会看到stream关键字后跟一个空格(0x20)。如果您阅读《 PDF参考手册》的第60页,则会显示:

  

流字典后面的关键字流应为   然后是由一个车厢组成的行尾标记   return和换行符或只是换行符,而不是用回车   一个人回来。

如果我将'stream'关键字后面的空格字符修改为换行(0x0A),则Acrobat也会显示文本行。但是,由于外部参照表项仍然错误,它仍然可以保存更改。