java实现PDF转图片

一时失言乱红尘 2024-03-31 14:04 162阅读 0赞

此方法windows和linux都能用.

1,导依赖

  1. <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
  2. <dependency>
  3. <groupId>org.apache.pdfbox</groupId>
  4. <artifactId>pdfbox</artifactId>
  5. <version>2.0.9</version>
  6. </dependency>

上面依赖如果maven下载不了,那么就自己去maven官网下载jar包.

2,上代码

  1. package com.export.diaojiekou.pdf_img;
  2. import org.apache.pdfbox.pdmodel.PDDocument;
  3. import org.apache.pdfbox.rendering.PDFRenderer;
  4. import javax.imageio.ImageIO;
  5. import java.awt.image.BufferedImage;
  6. import java.io.File;
  7. import java.io.IOException;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. public class pdfToImgUtil {
  11. /**
  12. * pdf转图片
  13. * 转换全部的pdf
  14. * @param fileAddress PDF文件绝对路径
  15. * @return ArrayList<String> 生成imgs文件群的绝对路径集合
  16. */
  17. public static List<String> pdf2Img(String fileAddress) throws IOException {
  18. // 将pdf装图片 并且自定义图片得格式大小
  19. File file = new File(fileAddress);
  20. ArrayList<String> fileAddresss = new ArrayList<>();
  21. PDDocument doc = null;
  22. try {
  23. doc = PDDocument.load(file);
  24. PDFRenderer renderer = new PDFRenderer(doc);
  25. int pageCount = doc.getNumberOfPages();
  26. for (int i = 0; i < pageCount; i++) {
  27. //经过测试,dpi为96,100,105,120,150,200中,105显示效果较为清晰,体积稳定,dpi越高图片体积越大,一般电脑显示分辨率为96
  28. BufferedImage image = renderer.renderImageWithDPI(i, 105); // Windows native DPI
  29. // BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
  30. String substring = fileAddress.substring(0, fileAddress.lastIndexOf("."));
  31. ImageIO.write(image, "jpg", new File(substring + "_" + i + ".jpg"));
  32. fileAddresss.add(substring + "_" + i + ".jpg");
  33. }
  34. } catch (IOException e) {
  35. throw new IOException("pdf转img工具类异常");
  36. } finally {
  37. if (doc != null) {
  38. doc.close();
  39. }
  40. }
  41. return fileAddresss;
  42. }
  43. /**
  44. * 自由确定起始页和终止页
  45. *
  46. * @param fileAddress 文件绝对路径
  47. * @param indexOfStart 开始页 开始转换的页码,从0开始
  48. * @param indexOfEnd 结束页 停止转换的页码,
  49. */
  50. public static void pdf3Img(String fileAddress, int indexOfStart, int indexOfEnd) throws IOException {
  51. // 将pdf装图片 并且自定义图片得格式大小
  52. File file = new File(fileAddress);
  53. PDDocument doc = null;
  54. try {
  55. doc = PDDocument.load(file);
  56. PDFRenderer renderer = new PDFRenderer(doc);
  57. int pageCount = doc.getNumberOfPages();
  58. for (int i = indexOfStart; i < indexOfEnd; i++) {
  59. BufferedImage image = renderer.renderImageWithDPI(i, 105); // Windows native DPI
  60. // BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
  61. String substring = fileAddress.substring(0, fileAddress.lastIndexOf("."));
  62. ImageIO.write(image, "jpg", new File(substring + "_" + (i + 1) + ".jpg"));
  63. }
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. }finally {
  67. if (doc != null) {
  68. doc.close();
  69. }
  70. }
  71. }
  72. private static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
  73. int type=source.getType();
  74. BufferedImage target=null;
  75. double sx=(double)targetW/source.getWidth();
  76. double sy=(double)targetH/source.getHeight();
  77. if(sx>sy){
  78. sx=sy;
  79. targetW=(int)(sx*source.getWidth());
  80. }else{
  81. sy=sx;
  82. targetH=(int)(sy*source.getHeight());
  83. }
  84. if(type==BufferedImage.TYPE_CUSTOM){
  85. ColorModel cm=source.getColorModel();
  86. WritableRaster raster=cm.createCompatibleWritableRaster(targetW, targetH);
  87. boolean alphaPremultiplied=cm.isAlphaPremultiplied();
  88. target=new BufferedImage(cm,raster,alphaPremultiplied,null);
  89. }else{
  90. target=new BufferedImage(targetW, targetH,type);
  91. }
  92. Graphics2D g=target.createGraphics();
  93. g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
  94. g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
  95. g.dispose();
  96. return target;
  97. }
  98. }

结束!!!!!!!!

发表评论

表情:
评论列表 (有 0 条评论,162人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java实现PDF图片

    注意事项:转图片后需仔细核对,因PDF内的字体可能不是宋体等最常见字体,转图片后可能出现中文乱码现象,需要查看原PDF文件中对应字体,下载后安装在本地或服务器上。 需引入ja