我使用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()地址为
iTextSharp.text.pdf.PdfReader.ReadPdf() at
ITextSharp.text.pdf.PdfReader..ctor(字符串文件名,Byte[]> ownerPassword)
Reader.PDF.DownloadPdf(String url)
令人讨厌的是,我不能总是重复错误。有时起作用,有时不起作用。有人遇到过这个问题吗?
发布于 2012-05-20 19:50:59
经过一些研究后,我发现这个问题要么与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;
}发布于 2019-02-27 15:08:51
我发现这是因为我调用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);发布于 2020-06-23 01:31:10
在我的例子中,这是因为我调用了一个.json文件,而iTextSharp显然只接受pdf文件。
https://stackoverflow.com/questions/10621936
复制相似问题