3 Stimmen

PDFRenderer - Export in Bild umwandeln, wurde fehlerhaft exportiert

Ich habe ein Programm geschrieben, um eine PDF-Datei in eine Serie von Bildern zu exportieren, wie folgt dargestellt:

 //Laden Sie die PDF vom Pfad (Datei)
    File file = new File("C:\\TEMP\\office\\a.pdf");
    RandomAccessFile raf = new RandomAccessFile(file, "r");
    byte[] b = new byte[(int) raf.length()];
    raf.readFully(b);
    ByteBuffer buf = ByteBuffer.wrap(b);
    PDFFile pdffile = new PDFFile(buf);

    //Anzahl der Seiten abrufen

    int numOfPages = pdffile.getNumPages();
    System.out.println(numOfPages);
    //Durch die Anzahl der Seiten iterieren
    for (int i = 1; i <= numOfPages; i++) {
        PDFPage page = pdffile.getPage(i);
        //Neues Bild erstellen
        Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight());
        Image img = page.getImage(rect.width, rect.height, rect, null, true, true);
        BufferedImage bufferedImage = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_RGB);
        Graphics g = bufferedImage.createGraphics();
        g.drawImage(img, 0, 0, null);
        g.dispose();

        File asd = new File("C:\\TEMP\\office\\img\\Testingx" + i + ".jpg");
        if (asd.exists()) {
            asd.delete();
        }
//Exportieren Sie das Bild im jpg-Format unter dem Pfad C:\TEMP\office\img\Dateiname
        ImageIO.write(bufferedImage, "jpg", asd);
    }
//Schließen Sie den Puffer und andere Dinge, die das exportierte Bild nicht beeinflussen

Dieses Programm funktioniert gut mit vielen PDF-Dateien, jedoch konnte eine PDF, die ich beim Testen meines Programms im Internet gefunden habe, nicht genau wie die anderen in ein Bild exportiert werden. Die von mir verwendeten Ressourcen sind unten aufgeführt.

Link zur Original-PDF: 2007_OReilly_EssentialActionScript3.0.pdf

Ich werde die Seite 7 der oben genannten PDF verwenden.

Das erwartete exportierte Bild : Klicken Sie hier für das erwartete Ergebnisbild

Nach Abschluss des Programms ist das resultierende Bild ziemlich anders.

Klicken Sie hier für das resultierende Bild

Wie Sie sehen können, verschiebt sich das resultierende Bild nach oben und ein Teil des Inhalts ist verschwunden, das Resultatbild hat das Formatieren in der PDF verloren, es ist nicht zentriert, sondern rückt nach rechts ein.

Der PDF-Renderer selbst hat kein Problem, wenn wir die .jar-Datei des PDF-Renderers ausführen, ist die oberste Seite und das Formatieren konsistent mit der Original-PDF-Datei.

PDF geöffnet mit PDFRenderer auf Seite 7

Bekanntes mögliches Problem: ImageIO unterstützt kein CMYK-Format, daher können Seite 1 und andere Seiten, die das CMYK-Format verwenden, nicht korrekt exportiert werden. Ich weiß nicht, ob ich recht habe.

Weiteres Problem: Der PDF-Renderer scheint beim Lesen von Seite 1 gescheitert zu sein, was möglicherweise auf etwas in der PDF-Formatierung zurückzuführen ist, das ich nicht genau kenne.

Verwendete Bibliothek : PDFRenderer

Sie können die PDF über den oben genannten Link herunterladen und das von mir bereitgestellte Programm verwenden, um das Problem zu reproduzieren.

Meine Frage: Wie kann ich dieses Problem beheben? Ist mit meinem Programm etwas nicht in Ordnung?

1voto

Junior Programmer Punkte 320

Ich habe das Problem selbst gefunden und konnte es beheben.

Die Erklärung lautet wie folgt:

Mein JAVA-Programm folgt nicht den "X"- und "Y"-Koordinaten in der PDF-Datei. Vereinfacht ausgedrückt hat mein Programm die X- und Y-Koordinaten fest codiert. In den meisten Fällen wird die PDF-Datei wie im folgenden Bild funktionieren:

Die meisten PDFs http://img266.imageshack.us/img266/7618/4cl5.png

JEDOCH ist die von mir bereitgestellte PDF nicht der Fall, die X-Koordinate der oberen linken Ecke ist nicht 0, genauso wie die Y-Koordinate. Deshalb wurde das Bild abgeschnitten.

Kurz gesagt wird mein Programm den Bildschirm der PDF mit einer rechteckigen Form erfassen, aber da die oben bereitgestellte PDF die Koordinate der oberen linken Ecke nicht findet, wird es den Bildschirm wie das Bild unten erfassen. Die Y-Koordinaten sind nicht im Bild angegeben, mein Fehler.

Ausnahme-PDF http://img12.imageshack.us/img12/9672/plhb.png

Mit der folgenden Änderung am Programm funktioniert es wie in den meisten Fällen und ist sogar noch besser.

Rechteck rect = new Rectangle((int)page.getPageBox().getX(), (int)page.getPageBox().getY(), (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight());

Dies ermöglicht es dem Programm, den gesamten von PDFRenderer bereitgestellten PDF-Bildschirm ab der oberen linken Ecke zu "erfassen", was genauso aussieht wie das erste von mir bereitgestellte Bild. Es funktioniert auch gleich bei unterschiedlichen Seitengrößen von A4 bis A7. Ich habe nicht weiter getestet, aber es funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X