zoukankan      html  css  js  c++  java
  • JAVA中pdf转图片的几种方法

     JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用。

    一、icepdf。有收费版和开源版,几种方法里最推荐的。转换的效果比较好,能识别我手头文件中的中文,就是转换后可能字体的关系部分字间距有点宽。因为,字体支持是要收费的,所以转换的图片会带有官方的水印。去水印的方法可以查看另一篇文章:icepdf去水印方法

    1、下载icepdf的架包,并导入项目中,这里用到4个,如下:

    2、附上代码例子:

    复制代码
     1   String filePath = "c:/test.pdf";
     2   Document document = new Document();
     3   document.setFile(filePath);
     4   float scale = 2.5f;//缩放比例
     5   float rotation = 0f;//旋转角度
     6         
     7   for (int i = 0; i < document.getNumberOfPages(); i++) {
     8     BufferedImage image = (BufferedImage)
     9     document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale);
    10     RenderedImage rendImage = image;
    11     try {
    12         File file = new File("c:/iecPDF_" + i + ".png");
    13         ImageIO.write(rendImage, "png", file); 
    14     } catch (IOException e) {
    15         e.printStackTrace();
    16     }
    17       image.flush();
    18   }
    19   document.dispose();
    复制代码

      例子中是pdf转png格式的,也可以将12、13行改成jpg,转出jpg格式的,但是从转换效果来看png的清晰度会相对较高。有个小技巧是12行改成jpg,但13行使用png,也就是转换成jpg格式但有png清晰度的图片。

    二、pdfbox。转换效果还可以,能识别我手中文件大部分内容,有部分内容无法识别。

    1、下载pdfbox的架包,并导入项目,这里用到2个,如下:

    maven获取jar:

    <!--pdf转图片-->
    <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>3.0.0-alpha2</version>
    </dependency>
    <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>fontbox</artifactId>
    <version>3.0.0-alpha2</version>
    </dependency>

    2、附上代码例子:

    复制代码
     1   File file = new File("c:\test.pdf");
     2   try {
     3     PDDocument doc = PDDocument.load(file);
     4     PDFRenderer renderer = new PDFRenderer(doc);
     5     int pageCount = doc.getNumberOfPages();
     6     for(int i=0;i<pageCount;i++){
     7       BufferedImage image = renderer.renderImageWithDPI(i, 296);
     8 //          BufferedImage image = renderer.renderImage(i, 2.5f);
     9       ImageIO.write(image, "PNG", new File("C:\pdfbox_image.png"));
    10     }
    11   } catch (IOException e) {
    12     e.printStackTrace();
    13   }
    复制代码

      例子中rederImageWithDPI的第二个参数为dpi分辨率单位,可根据需求调节大小,代码第八行提供了架包里另一种转图片的方法,第二个参数为缩放比。

    三、jpedal。效果不太理想,貌似对中文支持不太好,下面的lgpl版本是开源版。

     1、下载jpedal的架包,并导入项目中,如下:

    2、附上代码例子:

    复制代码
     1   PdfDecoder decode_pdf = new PdfDecoder(true);
     2   try {
     3     decode_pdf.openPdfFile("c:\test.pdf"); //file
     4 //   decode_pdf.openPdfFile("C:/jpedalPDF.pdf", "password"); //encrypted file
     5 //      decode_pdf.openPdfArray(bytes); //bytes is byte[] array with PDF
     6 //      decode_pdf.openPdfFileFromURL("http://www.mysite.com/jpedalPDF.pdf",false);
     7 //      decode_pdf.openPdfFileFromInputStream(in, false); 
     8 
     9     int start = 1, end = decode_pdf.getPageCount();
    10     for(int i = start; i < end+1; i++){
    11       BufferedImage img=decode_pdf.getPageAsImage(i);
    12       try {
    13         ImageIO.write(img, "png", new File("C:\jpedal_image.png"));
    14       } catch (IOException e) {
    15         e.printStackTrace();
    16       } 
    17     }
    18     decode_pdf.closePdfFile();
    19   } catch (PdfException e) {
    20     e.printStackTrace();
    21   }
    复制代码

      例子的3-7行还提供了几种不同的pdf打开方式,可以根据自己的需要选择使用。

    我是个双鱼座的小王子,沉浸在自己的代码世界里,去探索这未知的世界,希望遇到更多的小伙伴一起前行!
  • 相关阅读:
    推荐Windows下SVN服务器端和客户端工具软件
    QT的一些小知识
    Qt
    Qt
    ADB
    HTTP
    Python
    项目附
    项目
    架构
  • 原文地址:https://www.cnblogs.com/zxy-come-on/p/15429541.html
Copyright © 2011-2022 走看看