bro*_*oke 13 .net c# 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();
}
Run Code Online (Sandbox Code Playgroud)
99%的时间它运作得很好.但是,有一个PDF文件有时会抛出此异常:
找不到PDF标题签名.StackTrace:在iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader()位于iTextSharp.text.pdf.PdfReader.ReadPdf(),位于Reader.PDF的iTextSharp.text.pdf.PdfReader..ctor(String filename,Byte [] ownerPassword) .DownloadPdf(String url)在C:\ Documents\Visual Studio中
令人讨厌的是我不能总是重现错误.有时候它有效,有时则不然.有谁遇到过这个问题?
小智 17
经过一些研究,我发现这个问题与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;
}
Run Code Online (Sandbox Code Playgroud)
Ber*_*ern 17
我发现这是因为我在调用new PdfReader(pdf)文件末尾的 PDF 流位置。通过将位置设置为零,它解决了这个问题。
前:
// Throws: InvalidPdfException: PDF header signature not found.
var pdfReader = new PdfReader(pdf);
Run Code Online (Sandbox Code Playgroud)
后:
// Works correctly.
pdf.Position = 0;
var pdfReader = new PdfReader(pdf);
Run Code Online (Sandbox Code Playgroud)