iTextSharp异常:找不到PDF标头签名

时间:2012-05-16 15:39:07

标签: c# .net pdf itext

我正在使用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:at   iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader()at   iTextSharp.text.pdf.PdfReader.ReadPdf()at   iTextSharp.text.pdf.PdfReader..ctor(String filename,Byte []   ownerPassword)在Reader.PDF.DownloadPdf(String url)中   C:\ Documents \ Visual Studio

令人讨厌的是我无法总是重现错误。有时候它有效,有时则不然。有谁遇到过这个问题?

3 个答案:

答案 0 :(得分:18)

经过一些研究,我发现这个问题与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;
}

答案 1 :(得分:0)

我发现这是因为我正在用文件末尾的PDF流位置调用new PdfReader(pdf)。通过将位置设置为零,可以解决此问题。

之前:

// Throws: InvalidPdfException: PDF header signature not found.
var pdfReader = new PdfReader(pdf);

之后:

// Works correctly.
pdf.Position = Number.Zero;
var pdfReader = new PdfReader(pdf);

答案 2 :(得分:0)

在我的情况下,这是因为我正在调用.json文件,而iTextSharp显然只接受pdf文件。