2016-09-02 258 views
0

我无法使用阅读PDF文件。这个PDf是有效的PDF,如果我试图打开这个。ITEXT PDF阅读器无法阅读PDF

URL的PDF:http://www.fundslibrary.co.uk/FundsLibrary.DataRetrieval/Documents.aspx?type=fund_class_kiid&id=f096b13b-3d0e-4580-8d3d-87cf4d002650&user=fidelitydocumentreport

+0

请分享您的PDF,并使用代码来读它。没有两个,你的问题是无法回答的。 –

+0

请打开Adobe Reader的PDF,然后使用“另存为”,然后保存文件的副本以新的名称。你会注意到iText的'PdfReader'可以打开这个文件。这表明您对PDF有效的指控是错误的。你基于哪个理由?并非所有可在Adobe Reader中打开的PDF都是有效的。 –

回答

0

有问题的PDF是加密的。

根据PDF规范,

加密适用于所有字符串,并在文档的PDF文件流,但下列情况除外:

  • 值在拖车
  • 的ID条目
  • 在加密字典中的任何字符串
  • 任何字符串是内部流,例如内容流和压缩对象流,其本身被加密

后来有在其中文档级别元数据流不被加密任一者或其中仅附件被加密的特殊情况的信息。


PDF的交叉引用流解释是这样的:

<< 
/Root 101 0 R 
/Info 63 0 R 
/XRef(stream) 
/Encrypt 103 0 R 
/ID[<D034DE62220E1CBC2642AC517F0FE9C7><D034DE62220E1CBC2642AC517F0FE9C7>] 
/Type/XRef 
/W[1 3 2] 
/Index[0 107] 
/Size 107 
/Length 642 
>> 

正如你可以看到有一个非加密的字符串在这里,(stream),这既不是ID值条目,也不在加密字典中,也不在流内。此外,上述特例也不适用于此。

因此,该文件违反了在这里,PDF格式。因此,此文件不是有效的PDF


此外,根据PDF说明书

文件的最后一行应只包含档案结尾标志,%% EOF。

该文件在这样

Screenshot of last lines of file

因此handsends,该文件的最后一行确实包含的东西比最终的文件标记别人(这是前行)一个0x06和一个0x0c。

因此,该文件也违反了PDF规范。