打开PDF文件时,“PDFsharp无法处理随Acrobat 6引入的PDFfunction”错误

我使用PDFsharp(v1.32)合并多个PDF文件。 我使用以下代码打开文档:

PdfDocument inputDocument = PdfReader.Open(pdfFilePath, PdfDocumentOpenMode.Import); 

在打开一个文档(PDF版本1.5(Acrobat 6.x))时,我收到一个例外:

PdfSharp.dll中发生未处理的“PdfSharp.Pdf.IO.PdfReaderException”类型exception附加信息:无法处理iref流。 PDFsharp的当前实现无法处理Acrobat 6引入的此PDFfunction。

我该怎么办? 我需要合并所有文件,我不能跳过它。 我试图找到解决方案,但发现没有回答,或者只是来自PDFsharp团队的旧反馈,他们将“修复它”。

您可以使用iText5或iText7删除iref流。

下面的iText5块来自http://forum.pdfsharp.net/viewtopic.php?f=2&t=693

 static public PdfDocument Open(MemoryStream sourceStream) { PdfDocument outDoc = null; sourceStream.Position = 0; try { outDoc = PdfReader.Open(sourceStream, PdfDocumentOpenMode.Import); } catch (PdfSharp.Pdf.IO.PdfReaderException) { //workaround if pdfsharp doesn't support this pdf sourceStream.Position = 0; MemoryStream outputStream = new MemoryStream(); iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(sourceStream); iTextSharp.text.pdf.PdfStamper pdfStamper = new iTextSharp.text.pdf.PdfStamper(reader, outputStream); pdfStamper.FormFlattening = true; pdfStamper.Writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4); pdfStamper.Writer.CloseStream = false; pdfStamper.Close(); outDoc = PdfReader.Open(outputStream, PdfDocumentOpenMode.Import); } return outDoc; } 

我不得不为iText7重新编写它(仍然使用旧的PDFSharp):

 static PdfDocument CompatibleOpen(MemoryStream inputStream, PdfDocumentOpenMode openMode) { PdfDocument pdfDocument = null; inputStream.Position = 0; try { pdfDocument = PdfReader.Open(inputStream, openMode); } catch (PdfSharp.Pdf.IO.PdfReaderException) { inputStream.Position = 0; MemoryStream outputStream = new MemoryStream(); iText.Kernel.Pdf.WriterProperties writerProperties = new iText.Kernel.Pdf.WriterProperties(); writerProperties.SetPdfVersion(iText.Kernel.Pdf.PdfVersion.PDF_1_4); iText.Kernel.Pdf.PdfReader pdfReader = new iText.Kernel.Pdf.PdfReader(inputStream); iText.Kernel.Pdf.PdfDocument pdfStamper = new iText.Kernel.Pdf.PdfDocument(pdfReader, new iText.Kernel.Pdf.PdfWriter(outputStream, writerProperties)); iText.Forms.PdfAcroForm pdfForm = iText.Forms.PdfAcroForm.GetAcroForm(pdfStamper, true); if (!pdfForm.IsNull()) { pdfForm.FlattenFields(); } writerProperties.SetFullCompressionMode(false); pdfStamper.GetWriter().SetCloseStream(false); pdfStamper.Close(); pdfDocument = PdfReader.Open(outputStream, openMode); } return pdfDocument; } 

我希望这可以帮助那些经历同样痛苦的人,并将它们保存几天!