C# iTextSharp异常:未找到PDF标头签名

C# iTextSharp异常:未找到PDF标头签名,c#,.net,pdf,itext,C#,.net,Pdf,Itext,我正在使用iTextSharp阅读PDF文档的内容: PdfReader reader = new PdfReader(pdfPath); using (StringWriter output = new StringWriter()) { for (int i = 1; i <= reader.NumberOfPages; i++)

我正在使用
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();
                }
PdfReader阅读器=新的PdfReader(pdfPath);
使用(StringWriter输出=新建StringWriter())
{

对于(int i=1;i经过一些研究,我发现这个问题与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;
}

我发现这是因为我调用了
newpdfreader(pdf)
,pdf流位置位于文件末尾。通过将位置设置为零,解决了问题

之前:

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

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

就我而言,这是因为我调用了一个.json文件,而iTextSharp显然只接受pdf文件。

我花了一些时间,但我最终发现该文件确实已损坏。责任在于创建pdf的网站,而不是iTextSharp的错误。感谢您花时间回答我的问题。我可以确认这一点ccur如果您从steam和磁盘加载读卡器:),结果表明我在本例中查看的文件是错误的。文件名指的是我以前使用的一个资产(图像),即jpg不是pdf,doh:),因此它实际上是一个损坏的pdf(或者根本不是一个)。谢谢-让我走上了正确的道路。这个答案今天对我帮助很大。我建议在
reader.Close()中放置
finally
块,以防止进程锁定文件