读取 pdf 的 ITextSharp 异常:重建失败:字典键“”不是名称

Posted

技术标签:

【中文标题】读取 pdf 的 ITextSharp 异常:重建失败:字典键“”不是名称【英文标题】:ITextSharp exception to read pdf: Rebuild failed: Dictionary key "" is not a name 【发布时间】:2013-11-23 10:39:09 【问题描述】:

我在 .net (c#) 项目中使用 iTextSharp 库收到特定 pdf 文件的未处理异常。我无法理解我想上传的 pdf 的具体内容,但我可以看到我从 Internet 下载的基本 pdf 功能有效。 以下部分代码:

string pdfTemplate ="url 到特定的 pdf"; var pdfReader = new PdfReader(pdfTemplate);

抛出异常: 重建失败:字典键 Z 不是名称。在文件指针 224;原始消息:字典键 Z 不是名称。在文件指针 224

请问有什么建议吗?我没有想法......

【问题讨论】:

【参考方案1】:

文档信息字典有错误:

%PDF-1.4
1 0 obj
<<
/Title (þÿ)
/Creator (þÿ)
/Producer (þÿ Q t   4 . 8 . 2   \( C \)   2 0 1 1   N o k i a   C o r p o r a t i o n   a n d / o r   i t s   s u b s i d i a r y \( - i e s \))
/CreationDate (D:20131111142910)Z)
>>
endobj 

CreationDate 值有两个右括号。 iText 正确地假定第一个是正确的,即完成值,因此,将 Z 视为下一个条目的键。

但是键必须是名称,名称以斜线开头,但是这个要成为的名称没有斜线。 语法错误!!因此:

字典键 Z 不是名称。在文件指针 224

PdfReader 作为失败后的最后手段尝试再次读取 PDF,这一次首先尝试重建交叉引用。由于问题根本与交叉引用无关,这显然再次失败。因此:

重建失败:字典键 Z 不是名称。在文件指针 224;原始消息:字典键 Z 不是名称。在文件指针 224

这个语法错误的产生可能是一个 Qt 错误(这里将 Qt 4.8.2 命名为创建者)。

PS:您是否尝试过在 Adob​​e Reader 中打开此文件的文档属性?这里没有弹出任何内容,这肯定是由于该问题。

【讨论】:

#mkl,非常感谢您的回答!非常有帮助

以上是关于读取 pdf 的 ITextSharp 异常:重建失败:字典键“”不是名称的主要内容,如果未能解决你的问题,请参考以下文章

.jpg 到 .pdf 转换 - iTextSharp.text.PageSize' 在 Windows Phone 8.1 中引发异常

C# iTextSharp PDFReader 总是从 PDF 的开头读取

求助,c#如何利用iTextSharp.dll读取PDF的书签信息

iTextSharp PDF 使用 C# 读取突出显示的文本(突出显示注释)

iTextSharp 正在生成损坏的 PDF

iTextSharp 创建带有空白页的 PDF