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?