this pdf文件已经通过在线pdf工具进行了验证,我也根据Adobe的pdf参考书进行了检查,但是当我打开它时,该文件中没有文本,应该有一行。有人可以帮我解决这个文件中的问题吗?预先感谢。
答案 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也会显示文本行。但是,由于外部参照表项仍然错误,它仍然可以保存更改。