我正在使用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
令人讨厌的是我无法总是重现错误。有时候它有效,有时则不然。有谁遇到过这个问题?
答案 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文件。