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
块,以防止进程锁定文件