2016-05-04 3 views
-1

Ich versuche, PDF-Dokument in Java zu komprimieren. Die ursprüngliche Dateigröße beträgt 1,5-2 MB und wir müssen sie auf weniger als 1 MB reduzieren. Ich versuchte es mit iText-Komprimierung, aber die Ergebnisse sind nicht so effektiv und die Dateigröße ist immer noch größer als 1 MB.PDF-Komprimierungstechniken

byte[] mergedFileContent = byteArrayOS.toByteArray(); 
reader = new PdfReader(mergedFileContent); 
PdfStamper stamper = new PdfStamper(reader, byteArrOScomp); 
stamper.setFullCompression(); 
stamper.close(); 
reader.close(); 

Hat jemand an etwas Ähnlichem gearbeitet? Irgendwelche Eingaben würden geschätzt werden.

+0

Welche Medien/Bilder enthält Ihr PDF und wie wollen Sie diese komprimieren? – Jankapunkt

+0

@Jankapunkt Das PDF besteht im Wesentlichen aus Text- und Tabellenformatierung. Wir haben keine qualitativ hochwertigen Bilder, die auf dem PDF gerendert werden. Ich versuche nur, es auf eine Größe zu reduzieren, die weniger als 1 MB betragen könnte. – Nishant

+0

Sind Sie an den PDF-Stampfer gebunden? Wie ich es sehen kann, ist es in seiner Dokumentation nicht sehr klar, welchen Komprimierungsalgorithmus es verwendet. Die [Adobe PDF-Spezifikationen] (https://wwwimages2.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf) zeigt verschiedene mögliche Komprimierungsalgorithmen und -methoden. Wenn Ihre Bibliothek nicht die Auswahl zwischen verschiedenen Komprimierungsmethoden bietet, können Sie zu einer anderen Bibliothek wechseln. – Jankapunkt

Antwort

0

Sie möchten vielleicht in die offiziellen iText-Beispiele schauen, insbesondere das Beispiel HelloWorldCompression bezieht sich auf das Anwenden unterschiedlicher Kompressionsgrade sowohl bei der ersten PDF-Erstellungszeit als auch als Nachverarbeitungsschritt.

Die folgende Methode aus dieser Probe kann Ihnen helfen.

public void compressPdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest), PdfWriter.VERSION_1_5); 
    stamper.getWriter().setCompressionLevel(9); 
    int total = reader.getNumberOfPages() + 1; 
    for (int i = 1; i < total; i++) { 
     reader.setPageContent(i, reader.getPageContent(i)); 
    } 
    stamper.setFullCompression(); 
    stamper.close(); 
    reader.close(); 
} 

Wenn Sie sich fragen, wie ich es gefunden: Ich googeln für „itextpdf Beispiel volle Kompression“ und es war das zweite Ergebnis. (Der erste Fund enthält dieselbe Methode, ist aber nicht von der offiziellen iText-Site.)

+0

Das PDF wird mit einem Drittanbieter-Tool bearbeitet. Und ich habe versucht, alle verschiedenen Ebenen der Komprimierung zu verwenden, jedoch stamper.setFullCompression(); produziert immer noch das beste Ergebnis von allen. – Nishant

0

Sie könnten die Datei anschließend gzip, zip usw. Es ist nicht wirklich ein PDF-Komprimierungsformat, aber wenn Sie eingeschränkt sind und eine bessere Komprimierung wünschen, dann kann das Komprimieren der gesamten Sache gute Ergebnisse bringen, da es Daten auf Meta-Ebene komprimieren kann.