2017-04-13 3 views
0

Ich benutze iTextSharp, um eine Seite aus einem Dokument zu extrahieren. Das Originaldokument hat eine Größe von 1,1 MiB und hat 74 Seiten. Wenn ich nur eine Seite extrahiere, dann hat das resultierende PDF eine Größe von 1,2 MiB.Sehr große Dateigröße mit PdfStamper

Ich benutze diesen Code:

using (MemoryStream ms = new MemoryStream()) 
{ 
    using (PdfReader readerTemp = new PdfReader(btFile)) 
    {           
     readerTemp.SelectPages(new int[] {1}); 
     using (PdfStamper stamper = new PdfStamper(readerTemp, ms)) 
            { } 
    } 
    bt = ms.ToArray(); 
} 

Ich habe auch versucht Jay R answer's mit dem gleichen Ergebnis.

Warum ist die Dateigröße so groß?

- EDIT - Ich versuchte auch dies mit genau dem gleichen Ergebnis:

using (MemoryStream ms = new MemoryStream()) 
{ 
    using (PdfReader readerTemp = new PdfReader(btFile)) 
    { 
     reader.SetPageContent(1, reader.GetPageContent(1), PdfStream.BEST_COMPRESSION, true); 
     readerTemp.SelectPages(new int[] {1}); 
     using (PdfStamper stamper = new PdfStamper(readerTemp, ms, PdfWriter.VERSION_1_5)) 
     { 
      stamper.SetFullCompression(); 
     } 
} 
+0

komprimieren. Mit "Gewicht" meinst du Dateigröße? Ihr aktueller Fragentitel liest sich wie eine Spam-Anzeige ... –

+0

Auch der Rest der nicht französischsprachigen Welt verwendet "Megabytes" statt "Megaoctets". – CodeCaster

+2

Ich vermute, dass die Ressourcen von allen Seiten geteilt werden, das Extrahieren einer einzelnen Seite wird das ganze Gepäck bekommen. Bitte zeigen Sie uns das PDF. –

Antwort

1

Stellen Sie sich ein 3000 KB Dokument mit zehn Seiten und den folgenden Objekten:

  • vier Schriftuntergruppen auf jeder Seite verwendet, die jeweils etwa 50 KB
  • zehn Bilder, die auf einer einzigen Seite Abbildung, die jeweils etwa 200 KB (ein Bild pro Seite)
  • vier Bilder, die auf jeder Seite Abbildung, die jeweils etwa 50 KB
  • zehn Seiten mit Inhaltsströmen von etwa 25 KB jeden
  • etwa 350 KB für Objekte wie der Katalog, der Info-Wörterbuch, der Seitenbaum, die Querverweistabelle, etc ...

Eine einzelne Seite mindestens benötigt: - die vier Schriftuntergruppen: 4 mal 50 KB - das einzige Bild: 1 mal 200 KB - die vier Bilder: 4 mal 50 KB - ein einziger Inhaltsstream: 1 mal 50 KB - eine leicht reduzierte Querverweistabelle, ein leicht reduzierter Seitenbaum, ein fast identischer Katalog, ein Info-Wörterbuch gleicher Größe , ... 200 KB

Zusammen ist das 850 KB. Das bedeutet, dass Sie mit 8500 KB (10 mal 850 KB) enden, wenn Sie ein 10-seitiges 3000 KB PDF-Dokument in 10 separate Seiten aufteilen.

In Ihrem Fall sind die freigegebenen Ressourcen riesig. Ich nehme an, dass Sie eine Rechnung haben, die mit einem gescannten Bild erstellt wurde, das als Hintergrund jeder Seite dient. Dieser gescannte Hintergrund bestimmt den Großteil der Dateigröße.

Die Dateigröße eines 1-seitigen Dokuments kann höher sein als die Dateigröße eines Dokuments mit mehreren Seiten, wenn das 1-seitige Dokument keine komprimierten Objekte/eine komprimierte XRef-Tabelle verwendet, während das Dokument mehrere Seiten enthält tut. Sie können Objekte und die XRef-Tabelle durch die Einführung stamper.SetFullCompression();

+0

Vielen Dank für diese Erklärung. Ich habe das versucht, aber ohne Ergebnis. Bitte sehen Sie meine Bearbeitung. – SeyoS

+0

Meine Erklärung erklärt, warum das Ergebnis, das Sie erhalten, nicht das gewünschte Ergebnis ist. Alle Seiten haben eine gemeinsame Ressource, die für den Großteil der Dateigröße verantwortlich ist. –

+0

Mein schlechtes. Ich dachte, dass deine letzte Zeile meine Lösung war;) – SeyoS

1

Verwenden

 stamper.SetFullCompression(); 

Dateigröße zu reduzieren.

+0

Danke, aber es funktioniert überhaupt nicht ... Bitte sehen Sie meine Edit. – SeyoS