wake-up-neo.net

Konvertieren Sie a PDF Datei ins Bild

Ich wollte PDF Dokument in ein Bild konvertieren. Ich habe Ghost4j benutzt.

Problem: Ghost4J benötigt zur Laufzeit eine gsdll32.dll-Datei, und nicht möchte die DLL-Datei verwenden.

Frage 1: Gibt es eine Möglichkeit, in ghost4j ein Bild ohne die DLL zu konvertieren?

Frage 2: Ich habe die Lösung in der PDFBox-API gefunden. org.Apache.pdfbox.pdmodel.PDPagep have methodconvertToImage () `welche PDF Seite in das Bildformat konvertiert.

PDDocument doc = PDDocument.load(new File("/document.pdf"));
List<PDPage>pages =  doc.getDocumentCatalog().getAllPages();
PDPage page = pages.get(0);
BufferedImage image =page.convertToImage();
File outputfile = new File("/image.png");
ImageIO.write(image, "png", outputfile);
doc.close();

Ich habe nur Text im PDF Dokument. und ich habe diese Ausnahme, wenn ich diesen Code ausführe:

Aug 12, 2013 6:00:24 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: BDC
Exception in thread "main" Java.lang.ExceptionInInitializerError
    at org.Apache.pdfbox.pdmodel.font.PDTrueTypeFont.getawtFont(PDTrueTypeFont.Java:481)
    at org.Apache.pdfbox.pdmodel.font.PDSimpleFont.drawString(PDSimpleFont.Java:109)
    at org.Apache.pdfbox.pdfviewer.PageDrawer.processTextPosition(PageDrawer.Java:235)
    at org.Apache.pdfbox.util.PDFStreamEngine.processEncodedText(PDFStreamEngine.Java:496)
    at org.Apache.pdfbox.util.operator.ShowTextGlyph.process(ShowTextGlyph.Java:62)
    at org.Apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.Java:554)
    at org.Apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.Java:268)
    at org.Apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.Java:235)
    at org.Apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.Java:215)
    at org.Apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.Java:125)
    at org.Apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.Java:781)
    at org.Apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.Java:712)
    at ge.eid.esignature.adessa.pades.sign.PDFtoImage.main(PDFtoImage.Java:25)
Caused by: Java.lang.IllegalArgumentException
    at Java.nio.Buffer.position(Buffer.Java:216)
    at Sun.font.TrueTypeFont.lookupName(TrueTypeFont.Java:1153)
    at Sun.font.TrueTypeFont.getPostscriptName(TrueTypeFont.Java:1205)
    at Java.awt.Font.getPSName(Font.Java:1156)
    at org.Apache.pdfbox.pdmodel.font.FontManager.loadFonts(FontManager.Java:101)
    at org.Apache.pdfbox.pdmodel.font.FontManager.<clinit>(FontManager.Java:53)
    ... 13 more
18
grep

Sie können 04-Request-Headers.pdf Dateiseiten einfach in ein Bildformat konvertieren.

Konvertieren Sie alle PDF-Seiten in Java mithilfe des Felds PDF in ein Bildformat. 

Jar erforderlich pdfbox-1.8.3.jar

oder die Abhängigkeit von Maven

<dependency>
    <groupId>org.Apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>1.8.3</version>
</dependency>

Hier ist die Lösung: 

package com.pdf.pdfbox.examples;

import Java.awt.image.BufferedImage;
import Java.io.File;
import Java.util.List;

import javax.imageio.ImageIO;

import org.Apache.pdfbox.pdmodel.PDDocument;
import org.Apache.pdfbox.pdmodel.PDPage;

@SuppressWarnings("unchecked")
public class ConvertPDFPagesToImages {
    public static void main(String[] args) {
        try {
        String sourceDir = "C:/Documents/04-Request-Headers.pdf"; // Pdf files are read from this folder
        String destinationDir = "C:/Documents/Converted_PdfFiles_to_Image/"; // converted images from pdf document are saved here

        File sourceFile = new File(sourceDir);
        File destinationFile = new File(destinationDir);
        if (!destinationFile.exists()) {
            destinationFile.mkdir();
            System.out.println("Folder Created -> "+ destinationFile.getAbsolutePath());
        }
        if (sourceFile.exists()) {
            System.out.println("Images copied to Folder: "+ destinationFile.getName());             
            PDDocument document = PDDocument.load(sourceDir);
            List<PDPage> list = document.getDocumentCatalog().getAllPages();
            System.out.println("Total files to be converted -> "+ list.size());

            String fileName = sourceFile.getName().replace(".pdf", "");             
            int pageNumber = 1;
            for (PDPage page : list) {
                BufferedImage image = page.convertToImage();
                File outputfile = new File(destinationDir + fileName +"_"+ pageNumber +".png");
                System.out.println("Image Created -> "+ outputfile.getName());
                ImageIO.write(image, "png", outputfile);
                pageNumber++;
            }
            document.close();
            System.out.println("Converted Images are saved at -> "+ destinationFile.getAbsolutePath());
        } else {
            System.err.println(sourceFile.getName() +" File not exists");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

Mögliche Konvertierungen von Bildern in das jpg, jpeg, png, bmp, gif-Format.

Hinweis: Ich erwähnte die hauptsächlich verwendeten Bildformate.

ImageIO.write(image , "jpg", new File( destinationDir +fileName+"_"+pageNumber+".jpg" ));
ImageIO.write(image , "jpeg", new File( destinationDir +fileName+"_"+pageNumber+".jpeg" ));
ImageIO.write(image , "png", new File( destinationDir +fileName+"_"+pageNumber+".png" ));
ImageIO.write(image , "bmp", new File( destinationDir +fileName+"_"+pageNumber+".bmp" ));
ImageIO.write(image , "gif", new File( destinationDir +fileName+"_"+pageNumber+".gif" ));

Konsolenausgabe:

Images copied to Folder: Converted_PdfFiles_to_Image
Total files to be converted -> 13
Aug 06, 2014 1:35:49 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_1.png
Aug 06, 2014 1:35:50 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_2.png
Aug 06, 2014 1:35:51 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_3.png
Aug 06, 2014 1:35:51 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_4.png
Aug 06, 2014 1:35:52 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_5.png
Aug 06, 2014 1:35:52 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_6.png
Aug 06, 2014 1:35:53 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_7.png
Aug 06, 2014 1:35:53 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_8.png
Aug 06, 2014 1:35:54 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_9.png
Aug 06, 2014 1:35:54 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_10.png
Aug 06, 2014 1:35:54 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_11.png
Aug 06, 2014 1:35:55 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_12.png
Aug 06, 2014 1:35:55 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator
INFO: unsupported/disabled operation: i
Image Created -> 04-Request-Headers_13.png
Converted Images are saved at -> C:\Documents\Converted_PdfFiles_to_Image
27
pudaykiran

Sie können versuchen, NonSequentialParser zu verwenden, um Fehler bei einigen PDF -Dateien (mit inkrementellen Updates) zu vermeiden:

PDDocument doc = PDDocument.loadNonSeq (neue Datei ("/ document.pdf"));

6
stanlyF

Der Weg über PDFBox ist ein guter Weg, um native Bindings zu vermeiden. Versuchen Sie, den PDFImageWriter aus der PDFBox zu verwenden, ich habe das gleiche mit ein paar Zeilen gemacht und es hat perfekt funktioniert Verwenden Sie den Schreiber damit.

PDFImageWriter.write(doc, "png", null, , Integer.MAX_VALUE, "picture");

Für alle Seiten.

PDFImageWriter.write(doc, "png", null, 0, 0, "picture");

Siehe: PDFImageWriter Javadoc

4
Xondio

Möglicherweise haben Sie versucht, eine beschädigte PDF -Datei zu konvertieren. Ich habe die gleichen Fehler, wenn die Datei PDF JPXEncoded-Streams enthält.

3
Malhotra

Sie können PDF einfach mit PDFBox in ein Bild konvertieren. renderImageWithDPI Die Methode von PDFRenderer class von PDFBox dient zum Konvertieren von PDF in Bilder.

PDDocument doc=PDDocument.load(new File("filepath/sample.pdf"));
PDFRenderer pdfRenderer = new PDFRenderer(doc);
BufferedImage bffim = pdfRenderer.renderImageWithDPI(pageNo, 300, ImageType.RGB);
        String fileName = "image-" + page + ".png";
        ImageIOUtil.writeImage(bim, fileName, 300);
1
Bittu Choudhary

Für den Fehler:

org.Apache.pdfbox.util.PDFStreamEngine processOperator INFO: nicht unterstützter/deaktivierter Vorgang

Neben dem Apache pdfbox-Jar muss der JAR-Speicher fontbox-1.7.1 in den Klassenpfad eingefügt werden, wodurch das Problem behoben wird, da PDFBox intern fontbox-1.7.1 verwendet

0
user2605874
 try {           
                PDDocument document = PDDocument.load(PdfInfo.getPDFWAY());
                if (document.isEncrypted()) {
                    document.decrypt(PdfInfo.getPASSWORD());
                }
                if ("bilevel".equalsIgnoreCase(PdfInfo.getCOLOR())) {
                    PdfInfo.setIMAGETYPE( BufferedImage.TYPE_BYTE_BINARY);
                } else if ("indexed".equalsIgnoreCase(PdfInfo.getCOLOR())) {
                    PdfInfo.setIMAGETYPE(BufferedImage.TYPE_BYTE_INDEXED);
                } else if ("gray".equalsIgnoreCase(PdfInfo.getCOLOR())) {
                    PdfInfo.setIMAGETYPE(BufferedImage.TYPE_BYTE_GRAY);
                } else if ("rgb".equalsIgnoreCase(PdfInfo.getCOLOR())) {
                    PdfInfo.setIMAGETYPE(BufferedImage.TYPE_INT_RGB);
                } else if ("rgba".equalsIgnoreCase(PdfInfo.getCOLOR())) {
                    PdfInfo.setIMAGETYPE(BufferedImage.TYPE_INT_ARGB);
                } else {
                    System.exit(2);
                }
                PDFImageWriter imageWriter = new PDFImageWriter();
                boolean success = imageWriter.writeImage(document, PdfInfo.getIMAGE_FORMAT(),PdfInfo.getPASSWORD(),
                        PdfInfo.getSTART_PAGE(),PdfInfo.getEND_PAGE(),PdfInfo.getOUTPUT_PREFIX(),PdfInfo.getIMAGETYPE(),PdfInfo.getRESOLUTION());
                if (!success) {
                    System.exit(1);
                }
                document.close();

        } catch (IOException | CryptographyException | InvalidPasswordException ex) {
            Logger.getLogger(PdfToImae.class.getName()).log(Level.SEVERE, null, ex);
        }
public class PdfInfo {
    private static String PDFWAY;    
    private static String OUTPUT_PREFIX;
    private static String PASSWORD;
    private static int START_PAGE=1;
    private static int END_PAGE=Integer.MAX_VALUE;
    private static String IMAGE_FORMAT="jpg";
    private static String COLOR="rgb";
    private static int RESOLUTION=256;
    private static int IMAGETYPE=24;
    private static String filename;
    private static String filePath="";
}
0
Vahap Gençdal