2017-01-05 5 views
0

Der folgende Code verwendet wird, um mehrere PDF-Datei in einer einzigen DateiiTextSharp pdf Größe fusionierte erhöht

public byte[] MergePdfFiles(IEnumerable<byte[]> files) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     var pdfDoc = new iTextSharp.text.Document(); 
     var pdf = new PdfCopy(pdfDoc, stream); 
     pdf.SetMergeFields(); 

     pdfDoc.Open(); 

     foreach (var file in files) 
     { 
      try 
      { 
       pdf.AddDocument(new PdfReader(file)); 
      } 
      catch (InvalidPdfException ex) 
      { 
       _loggingServiceClient.Log(LogLevel.Error, ex); 
       throw; 
      } 
     } 

     pdfDoc.Close(); 

     return stream.GetBuffer(); 
    } 
} 

Der Code funktioniert gut, aber die erzeugte Dateigröße ist fast das Doppelte der Gesamtgröße aller fusionierten Dateien zu verschmelzen. Ich versuche, einige Komprimierungsanweisungen wie pdf.CompressionLevel = PdfStream.BEST_COMPRESSION; und pdf.SetFullCompression(); ohne Erfolg hinzuzufügen.

Beachten Sie, dass das Ausführen einer einfachen saveAs in Acrobat Reader aus der generierten Datei in neue Datei mit einer anständigen Größe (die kombinierte Größe aller zusammengeführten Dateien) resultiert.

Ich habe auch andere Möglichkeiten versucht, Datei zusammenzuführen, wie zum Beispiel mit der Methode addPage, die am Ende gleich.

Antwort

0

Bitte geben diesem einen Versuch:

public byte[] MergePdfFiles(IEnumerable<byte[]> files) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     var pdfDoc = new iTextSharp.text.Document(); 
     var pdf = new PdfSmartCopy(pdfDoc, stream); 
     pdf.SetMergeFields(); 

     pdfDoc.Open(); 

     foreach (var file in files) 
     { 
      try 
      { 
       pdf.AddDocument(new PdfReader(file)); 
      } 
      catch (InvalidPdfException ex) 
      { 
       _loggingServiceClient.Log(LogLevel.Error, ex); 
       throw; 
      } 
     } 

     pdfDoc.Close(); 

     return stream.GetBuffer(); 
    } 
} 

Falls Sie nicht sofort den Unterschied mit Ihrem eigenen Code sehen: Ich PdfCopy-PdfSmartCopy geändert. Wenn dies nicht hilft (zusammen mit der vollständigen Komprimierung), kann sehr wenig getan werden. Die Hauptursache ist vermutlich die Tatsache, dass iText die Schriftteilmengen der verschiedenen Dateien nicht zu einer neuen Schriftart kombinieren kann (was einer der Tricks ist, mit denen Acrobat die Dateigröße reduziert).