pdf komprimieren mit großen Bildern, die über java

Suche nach einem Weg, der zum komprimieren von Bildern in eine pdf-Datei und die Ausgabe ein pdf-zum archivieren. Ich kann nicht komprimieren die Bilder vor der Schöpfung, wie es wäre, gefährden die Qualität der Druck.

Die Größe der einzelnen pdf-Datei ist rund 8 MB, wobei der Großteil dieser bis zu 2 Bilder. Bilder sind im png-format und werden ins pdf-während generation(3rd-party-generator verwendet)

Gibt es eine Möglichkeit, zu komprimieren und diese in java, ohne Verwendung eines 3rd-party-tool. Ich habe versucht mit pdfbox, itext und eine 3rd-party-exe(neevia), die 3rd-party-tool die einzige, die mir gegeben hat, keine Ergebnisse bisher(nach rund einem halben MB), aber ich will nicht die Kontrolle aufzugeben, um eine exe-Datei.
Beispiel-code unten.

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.common.PDStream;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

public class compressPDF {

public static void main (String[] args) throws IOException, DocumentException, COSVisitorException {


    /*
     * Using PDF Box
     */

    PDDocument doc; //= new PDDocument();

    doc = PDDocument.load("C:/_dev_env_/TEMP/compressPDF/TRPT_135002_1470_20131212_121423.PDF");

    PDStream stream= new PDStream(doc);
    stream.addCompression();

    doc.save("C:/_dev_env_/TEMP/compressPDF/compressed_pdfBox.pdf");

    doc.close();

    /*
     * Using itext
     */

    PdfReader reader = new PdfReader("C:/_dev_env_/TEMP/compressPDF/TRPT_135002_1470_20131212_121423.PDF");

    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("C:/_dev_env_/TEMP/compressPDF/compressed_Itext.pdf"), PdfWriter.VERSION_1_5);
    stamper.setFullCompression();
    stamper.getWriter().setCompressionLevel(50);
    int total = reader.getNumberOfPages() + 1;
    for (int i = 1; i < total; i++) {
        reader.setPageContent(i, reader.getPageContent(i));
    }
    stamper.close();
    reader.close();

    /*
     * Using 3rd party - Neevia 
     */
    try {
    Process process = new ProcessBuilder("C:/Program Files (x86)/neeviaPDF.com/PDFcompress/cmdLine/CLcompr.exe","C:/_dev_env_/TEMP/compressPDF/TRPT_135002_1470_20131212_121423.PDF", "C:/_dev_env_/TEMP/compressPDF/compressed_Neevia.pdf").start();
    InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;

    System.out.printf("Output of running %s is:", Arrays.toString(args));

    while ((line = br.readLine()) != null) {
      System.out.println(line);
    }
    } catch (Exception e) {
        System.out.println(e);
    } finally {
        System.out.println("Created!!");
    }

}

}
Was sind Sie das speichern der Bilder? Haben Sie sich überlegt ein verlustfreies format wie png?
Bilder liegen im png-format gebracht und in das Dokument mit einem generator genannt doc1(3rd-party). Vielen Dank für die schnelle Antwort 🙂
Wenn der Großteil der pdf-Größe ist diese Bilder-und Sie sind bereits komprimiert ist, können Sie möglicherweise in einer Sackgasse. Ich habe einige der Forschung in der zwischen-und pdf speichern von Bildern mit Komprimierung: en.wikipedia.org/wiki/Pdf#Raster_images, so möchten Sie vielleicht, um zu bestimmen, wie das pdf-Dokument zusammengestellt. Nicht sicher, viel kann getan werden, sobald die pdf-Datei ist bereits montiert, es sei denn, Sie entfernen und erneut hinzufügen, die Bilder.
Danke Taylor, ich habe komprimiert die pdf ' s mit tinyPNG. Ich denke, dieses klopfen um 50% ab. Es ist wohl noch nicht genug, so kann ich Sie verwenden müssen die 3rd-party-tool. Wenn jemand weiß, wie zu extrahieren und re-fügen Sie das Bild, das ich daran interessiert wäre, dass ein go auch...
Dank Bruno. Das brachte mich auf den richtigen Weg. Mit einigen geringfügigen Modifikationen an diesem code habe ich genau das was ich brauche. Ich war in der Lage, die 7546KB nach unten, 408KB. Ergebnis! Ich poste den geänderten code jetzt 🙂

InformationsquelleAutor Daniel Mulcahy | 2013-12-16

Schreibe einen Kommentar