java中pdf转图片的实现方法

网友投稿 1737 2023-06-25


java中pdf转图片的实现方法

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

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

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

2、附上代码例子:

String filePath = "c:/test.pdf";

  Document document = new Document();

  document.setFile(filePath);

  float scale = 2.5f;//缩放比例

  float rotation = 0f;//旋转角度

  for (int i = 0; i < document.getNumberOfPages(); i++) {

    BufferedImage image = (BufferedImage)

    document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale);

    RenderedImage rendImage = image;

    try {

    File file = new File("c:/iecPDF_" + i + ".png");

    ImageIO.write(rendImage, "png", file);

14     } catch (IOException e) {

    e.printStackTrace();

    }

  image.flush();

  }

  document.dispose();

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

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

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

2、附上代码例子:

File file = new File("c:\\test.pdf");

  try {

    PDDocument doc = PDDocument.load(file);

    PDFRenderer renderer = new PDFRenderer(doc);

5     int pageCount = doc.getNumberOfPages();

    for(int i=0;i

      BufferedImage image = renderer.renderImageWithDPI(i, 296);

// BufferedImage image = renderer.renderImage(i, 2.5f);

      ImageIO.write(image, "PNG", new File("C:\\pdfbox_image.png"));

    }

  } catch (IOException e) {

    e.printStackTrace();

  }

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

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

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

2、附上代码例子:

PdfDecoder decode_pdf = new PdfDecoder(true);

  try {

    decode_pdf.openPdfFile("c:\\test.pdf"); //file

//   decode_pdf.openPdfFile("C:/jpedalPDF.pdf", "password"); //encrypted file

// decode_pdf.gRMXTxfvopenPdfArray(bytes); //bytes is byte[] array with PDF

// decode_pdfhttp://.openPdfFileFromURL("http://mysite.com/jpedalPDF.pdf",false);

// decode_pdf.openPdfFileFromInputStream(in, false);

    int start = 1, end = decode_pdf.getPageCount();

    for(int i = start; i < end+1; i++){

      BufferedImage img=decode_pdf.getPageAsImage(i);

      try {

        ImageIO.write(img, "png", new File("C:\\jpedal_image.png"));

      } catch (IOException e) {

        e.printStackTrace();

      }

    }

    decode_pdf.closePdfFile();

  } catch (PdfException e) {

    e.printStackTrace();

  }

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

      BufferedImage image = renderer.renderImageWithDPI(i, 296);

// BufferedImage image = renderer.renderImage(i, 2.5f);

      ImageIO.write(image, "PNG", new File("C:\\pdfbox_image.png"));

    }

  } catch (IOException e) {

    e.printStackTrace();

  }

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

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

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

2、附上代码例子:

PdfDecoder decode_pdf = new PdfDecoder(true);

  try {

    decode_pdf.openPdfFile("c:\\test.pdf"); //file

//   decode_pdf.openPdfFile("C:/jpedalPDF.pdf", "password"); //encrypted file

// decode_pdf.gRMXTxfvopenPdfArray(bytes); //bytes is byte[] array with PDF

// decode_pdfhttp://.openPdfFileFromURL("http://mysite.com/jpedalPDF.pdf",false);

// decode_pdf.openPdfFileFromInputStream(in, false);

    int start = 1, end = decode_pdf.getPageCount();

    for(int i = start; i < end+1; i++){

      BufferedImage img=decode_pdf.getPageAsImage(i);

      try {

        ImageIO.write(img, "png", new File("C:\\jpedal_image.png"));

      } catch (IOException e) {

        e.printStackTrace();

      }

    }

    decode_pdf.closePdfFile();

  } catch (PdfException e) {

    e.printStackTrace();

  }

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于java中可变长参数的定义及使用方法详解
下一篇:浅谈java中的TreeMap 排序与TreeSet 排序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~