iTextSharp 异常:未找到 PDF 标头签名
Posted
技术标签:
【中文标题】iTextSharp 异常:未找到 PDF 标头签名【英文标题】:iTextSharp exception: PDF header signature not found 【发布时间】:2012-05-24 05:11:21 【问题描述】:我正在使用iTextSharp
阅读PDF文档的内容:
PdfReader reader = new PdfReader(pdfPath);
using (StringWriter output = new StringWriter())
for (int i = 1; i <= reader.NumberOfPages; i++)
output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()));
reader.Close();
pdfText = output.ToString();
99% 的时间它工作得很好。但是,有一个 PDF 文件有时会抛出此异常:
未找到 PDF 标题签名。 StackTrace:在 iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader() 在 iTextSharp.text.pdf.PdfReader.ReadPdf() 在 iTextSharp.text.pdf.PdfReader..ctor(String filename, Byte[]> ownerPassword) at Reader.PDF.DownloadPdf(String url) in
烦人的是我不能总是重现错误。有时有效,有时无效。有人遇到过这个问题吗?
【问题讨论】:
【参考方案1】:您可能正在使用其他方法或程序打开文件,就像我的情况一样。验证您的文件没有任何工作,您还可以使用资源监视器来验证哪些进程正在处理您的文件。
【讨论】:
这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review【参考方案2】:我发现这是因为我调用 new PdfReader(pdf)
时 PDF 流的位置位于文件末尾。通过将位置设置为零,它解决了问题。
之前:
// Throws: InvalidPdfException: PDF header signature not found.
var pdfReader = new PdfReader(pdf);
之后:
// Works correctly.
pdf.Position = 0;
var pdfReader = new PdfReader(pdf);
【讨论】:
【参考方案3】:就我而言,这是因为我正在调用一个 .json 文件,而 iTextSharp 显然只接受 pdf 文件。
【讨论】:
【参考方案4】:经过一些研究,我发现此问题与生成 PDF 期间文件损坏有关,或者与文档中不符合 iTextSharp 中实现的 PDF 标准的对象相关的错误有关。似乎也只有当您从磁盘读取 PDF 文件时才会发生这种情况。
我还没有找到问题的完整解决方案,只有一种解决方法。我所做的是使用 PdfReader itextsharp 对象读取 PDF 文档,并查看在正常操作中读取文件之前是否发生错误或异常。
所以运行类似这样的东西:
private bool IsValidPdf(string filepath)
bool Ret = true;
PdfReader reader = null;
try
reader = new PdfReader(filepath);
catch
Ret = false;
return Ret;
【讨论】:
我花了一段时间,但我终于发现文件确实已损坏。责任归咎于创建 PDF 的网站,而不是 iTextSharp 的错误。感谢您花时间回答我的问题。 我可以确认,如果您从 Steam 和磁盘加载阅读器,就会发生这种情况:) 原来我在查看错误的文件。文件名指的是我之前使用的资产(图像)之一,即 jpg 不是 pdf,doh :),因此它实际上是损坏的 PDF(或根本不是 PDF)。谢谢 - 让我走上了正确的道路。 这个答案今天对我帮助很大。我建议使用reader.Close()
放置一个finally
块,以防止文件被进程锁定以上是关于iTextSharp 异常:未找到 PDF 标头签名的主要内容,如果未能解决你的问题,请参考以下文章
让PdfStamper使用MemoryStreams(c#,itextsharp)
.jpg 到 .pdf 转换 - iTextSharp.text.PageSize' 在 Windows Phone 8.1 中引发异常