首页 文章

Apache PDFBox将pdf转换为图像

提问于
浏览
43

有人可以给我一个例子,说明如何使用Apache PDFBox在不同的图像中转换pdf(pdf的每一页一个) . 提前致谢

3 回答

  • 84

    1.8 . *版本的解决方案:

    PDDocument document = PDDocument.loadNonSeq(new File(pdfFilename), null);
    List<PDPage> pdPages = document.getDocumentCatalog().getAllPages();
    int page = 0;
    for (PDPage pdPage : pdPages)
    { 
        ++page;
        BufferedImage bim = pdPage.convertToImage(BufferedImage.TYPE_INT_RGB, 300);
        ImageIOUtil.writeImage(bim, pdfFilename + "-" + page + ".png", 300);
    }
    document.close();
    

    在构建之前不要忘记阅读1.8 dependencies page .

    2.0版本的解决方案:

    PDDocument document = PDDocument.load(new File(pdfFilename));
    PDFRenderer pdfRenderer = new PDFRenderer(document);
    for (int page = 0; page < document.getNumberOfPages(); ++page)
    { 
        BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
    
        // suffix in filename will be used as the file format
        ImageIOUtil.writeImage(bim, pdfFilename + "-" + (page+1) + ".png", 300);
    }
    document.close();
    

    ImageIOUtil类位于单独的下载/工件(pdf-tools)中 . 在进行构建之前阅读2.0 dependencies page,您将需要额外的jar文件用于带有jbig2图像的PDF,用于保存到tiff图像和读取加密文件 .

    确保使用您正在使用的任何JDK版本的最新版本,即如果您使用的是jdk8,则不要使用版本1.8.0_5,请使用1.8.0_191或您阅读时的最新版本 . 早期版本非常慢 .

  • 1

    没有任何额外的依赖项,您可以使用 PDFBox 中已包含的 PDFToImage 类 .

    科特林:

    PDFToImage.main(arrayOf<String>("-outputPrefix", "newImgFilenamePrefix", existingPdfFilename))

    其他配置选择:https://pdfbox.apache.org/docs/2.0.8/javadocs/org/apache/pdfbox/tools/PDFToImage.html

  • 0
    public class PDFtoJPGConverter {
    
         public List<File> convertPdfToImage(File file, String destination) throws Exception {
    
        File destinationFile = new File(destination);
    
        if (!destinationFile.exists()) {
            destinationFile.mkdir();
            System.out.println("DESTINATION FOLDER CREATED -> " + destinationFile.getAbsolutePath());
        }else if(destinationFile.exists()){
            System.out.println("DESTINATION FOLDER ALLREADY CREATED!!!");
        }else{
            System.out.println("DESTINATION FOLDER NOT CREATED!!!");
        }
    
        if (file.exists()) {
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            List<File> fileList = new ArrayList<File>();
    
            String fileName = file.getName().replace(".pdf", "");
            System.out.println("CONVERTER START.....");
    
            for (int i = 0; i < doc.getNumberOfPages(); i++) {
                // default image files path: original file path
                // if necessary, file.getParent() + "/" => another path
                File fileTemp = new File(destination + fileName + "_" + i + ".jpg"); // jpg or png
                BufferedImage image = renderer.renderImageWithDPI(i, 200);
                // 200 is sample dots per inch.
                // if necessary, change 200 into another integer.
                ImageIO.write(image, "JPEG", fileTemp); // JPEG or PNG
                fileList.add(fileTemp);
            }
            doc.close();
            System.out.println("CONVERTER STOPTED.....");
            System.out.println("IMAGE SAVED AT -> " + destinationFile.getAbsolutePath());
            return fileList;
        } else {
            System.err.println(file.getName() + " FILE DOES NOT EXIST");
        }
        return null;
        }
    
          public static void main(String[] args) {
    
        try {
            PDFtoJPGConverter converter = new PDFtoJPGConverter();
            Scanner sc = new Scanner(System.in);
            System.out.print("Enter your destination folder where save image \n");
            // Destination = D:/PPL/;
            String destination = sc.nextLine();
    
            System.out.print("Enter your selected pdf files name with source folder \n");
            String sourcePathWithFileName = sc.nextLine();
            // Source Path = D:/PDF/ant.pdf,D:/PDF/abc.pdf,D:/PDF/xyz.pdf
            if (sourcePathWithFileName != null || sourcePathWithFileName != "") {
                String[] files = sourcePathWithFileName.split(",");
                for (String file : files) {
                    File pdf = new File(file);
                    System.out.print("FILE:>> "+ pdf);
                    converter.convertPdfToImage(pdf, destination);
                }
            }
    
        } catch (Exception ex) {
            ex.printStackTrace();
        }
      }
    
    }
    

    ====================================

    在这里,我使用Apache pdfbox-2.0.8,commons-logging-1.2和fontbox-2.0.8 Library

    快乐编码:)

相关问题