Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';PDFsharp无法处理Acrobat 6';打开PDF文件时出错_C#_.net_Pdf_Pdfsharp - Fatal编程技术网

C# ';PDFsharp无法处理Acrobat 6';打开PDF文件时出错

C# ';PDFsharp无法处理Acrobat 6';打开PDF文件时出错,c#,.net,pdf,pdfsharp,C#,.net,Pdf,Pdfsharp,我使用PDFsharp(v1.32)合并几个PDF文件。我使用以下代码打开文档: PdfDocument inputDocument = PdfReader.Open(pdfFilePath, PdfDocumentOpenMode.Import); 打开一个文档(PDF版本1.5(Acrobat 6.x))时,我收到一个例外: PdfSharp.dll中发生类型为“PdfSharp.Pdf.IO.PdfReaderException”的未处理异常 其他信息:无法处理iref流。PDFshar

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

PdfDocument inputDocument = PdfReader.Open(pdfFilePath, PdfDocumentOpenMode.Import);
打开一个文档(PDF版本1.5(Acrobat 6.x))时,我收到一个例外:

PdfSharp.dll中发生类型为“PdfSharp.Pdf.IO.PdfReaderException”的未处理异常 其他信息:无法处理iref流。PDFsharp的当前实现无法处理Acrobat 6引入的此PDF功能


我能用它做什么?我需要合并所有文件,我不能跳过它。我试图找到解决方案,但没有找到答案,或者只是PDFsharp团队提供的非常旧的反馈,他们将“修复它”。

从2015年12月开始使用PDFsharp 1.50 beta 3或更新版本




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

下面的iText5块是从

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


我希望这能帮助那些正在经历和我一样痛苦的人,并为他们节省几天的时间

op显然使用pdfsharp,而不是iText。在这种情况下,使用基于该不同pdf库的解决方案进行回答被视为不好的风格。knitTheCode的回答是相关的,因为PDFSharp管理员在提供的链接中指出,仅使用PDFSharp无法解决此问题(beta版本除外,但无法在生产环境中使用)。我还实现了这个解决方案,即使您必须使用另一个库,它也可以工作nicely@SiyavashHamdiGDIPlusImage的方法
仅适用于GDI+版本,而不适用于核心版本或WPF版本。使用GDI项目或GDI NuGet包。
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;
  }
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;
}