pdf转图片org.apache.pdfbox

蔚落 2022-11-06 14:58 357阅读 0赞

pdfbox —> Save as Images

      1. 使用到的资源:
    • 2.简述:
    • 3.PDFBox的功能:
    • 4.Save as Image
      • 代码:
      • 效果:

1. 使用到的资源:

org.apache.pdfbox
文档地址:官方文档

2.简述:

Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 使用此库,您可以开发用于创建,转换和操作PDF文档的Java程序。
除此之外,PDFBox还包括一个命令行实用程序,用于使用可用的Jar文件对PDF执行各种操作。

3.PDFBox的功能:

Extract Text - 使用PDFBox,您可以从PDF文件中提取Unicode文本。

Split & Merge - 使用PDFBox,您可以将单个PDF文件分成多个文件,并将它们合并为一个文件。

Fill Forms - 使用PDFBox,您可以在文档中填写表单数据。

Print - 使用PDFBox,您可以使用标准Java打印API打印PDF文件。

Save as Image - 使用PDFBox,您可以将PDF保存为图像文件,如PNG或JPEG。

Create PDFs - 使用PDFBox,您可以通过创建Java程序创建新的PDF文件,还可以包含图像和字体。

Signing - 使用PDFBox,您可以将数字签名添加到PDF文件。

4.Save as Image

我主要想做Save as Image,贴代码,可以拿来即用的那种:

代码:

介绍一下我的方法:

  • 参数:需要解析为图片的pdf文件
  • 响应:根据pdf页数分割,每页一张图的图片列表

    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.rendering.ImageType;
    import org.apache.pdfbox.rendering.PDFRenderer;

    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;

    /* ClassName: PdfBoxUtils Description: author: yellow_star 2021-3-8 */
    public class PdfBoxUtils {

    // 经过测试,dpi为96,100,105,120,150,200中,105显示效果较为清晰,体积稳定,dpi越高图片体积越大,一般电脑显示分辨率为96
    public static final float DEFAULT_DPI = 105;
    // 默认转换的图片格式为jpg
    public static final String DEFAULT_FORMAT = “jpg”;

    public static List pdfToImage(File file) {

    1. List<File> imgList = new ArrayList<File>();
    2. try {
    3. String name = file.getName();
    4. // 图像合并使用参数
    5. // 总宽度
    6. int width = 0;
    7. // 保存一张图片中的RGB数据
    8. int[] singleImgRGB;
    9. int shiftHeight = 0;
    10. // 保存每张图片的像素值
    11. BufferedImage imageResult = null;
    12. // 利用PdfBox生成图像
    13. PDDocument pdDocument = PDDocument.load(file);
    14. PDFRenderer renderer = new PDFRenderer(pdDocument);
    15. // 循环每个页码
    16. for (int i = 0; i < pdDocument.getNumberOfPages(); i++) {
    17. BufferedImage image = renderer.renderImageWithDPI(i, DEFAULT_DPI, ImageType.RGB);
    18. int imageHeight = image.getHeight();
    19. int imageWidth = image.getWidth();
    20. //计算高度和偏移量
    21. //使用第一张图片宽度;
    22. width = imageWidth;
    23. //保存每页图片的像素值
    24. imageResult = new BufferedImage(width, imageHeight, BufferedImage.TYPE_INT_RGB);
    25. //这里有高度,可以将imageHeight*len,我这里值提取一页所以不需要
    26. singleImgRGB = image.getRGB(0, 0, width, imageHeight, null, 0, width);
    27. // 写入流中
    28. imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width);
    29. String imgUrl = “这里写一个你要准备生成图片到的位置”;
    30. File imgFile = new File(imgUrl);
    31. imgList.add(imgFile);
    32. // 写图片
    33. ImageIO.write(imageResult, DEFAULT_FORMAT, imgFile);
    34. }
    35. pdDocument.close();
    36. } catch (Exception e) {
    37. e.printStackTrace();
    38. }
    39. return imgList;

    }
    }

效果:

源文件:
在这里插入图片描述
转化结果:
在这里插入图片描述

发表评论

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

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

相关阅读

    相关 Java实现PDF图片

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