java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
下面小编就为大家带来一篇 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<pageCount;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.openPdfArray(bytes); //bytes is byte[] array with PDF
- // decode_pdf.openPdfFileFromURL("http://www.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 打开方式,可以根据自己的需要选择使用。
以上这篇 java 中 pdf 转图片的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/1204/359200.html