Java实现pdf转图片案例

 更新时间:2021年06月30日 15:52:52   作者:简若宁  
这篇文章主要介绍了Java实现pdf转图片案例,按照步骤放置代码,一步步完成该案例,将代码部署便可,需要的朋友可以参考下

工程加入依赖:

<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox</artifactId>
			<version>2.0.15</version>
		</dependency>
		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox-tools</artifactId>
			<version>2.0.15</version>
		</dependency>

pdf文件转图片:

    public static List<String> pdf2Img(File pdfFile) {
        if (pdfFile == null || !pdfFile.exists()) {
            throw new RuntimeException("pdf文件不能为空");
        }
        String name = pdfFile.getName().substring(0, pdfFile.getName().lastIndexOf("."));
        String targetPath = pdfFile.getParent() + File.separator + name;
        List<String> imgList = new ArrayList<>();
        try {
            PDDocument doc = PDDocument.load(pdfFile);
            // 页数
            int pageCount = doc.getNumberOfPages();
            PDFRenderer pdfRenderer = new PDFRenderer(doc);
            for (int i = 0; i < pageCount; i++) {
                File targetFile = new File(targetPath + File.separator + name + "-" + (i + 1) + ".jpg");
                if (!targetFile.getParentFile().exists()) {
                    FileUtil.mkdir(targetFile.getParentFile());
                }
                pdfRenderer.renderImage(i);
                BufferedImage image = pdfRenderer.renderImageWithDPI(i, 105, ImageType.RGB);
                ImageIOUtil.writeImage(image, targetFile.getPath(), 105);
                imgList.add(targetFile.getPath());
            }
        } catch (IOException e) {
            log.error("文件转换异常", e);
            throw new RuntimeException("文件转换异常,err=" + e.getMessage());
        }

pdf转成一张图片:

    /**
     * pdf转成一张图片
     *
     * @param pdfFile pdf图片文件
     * @return 图片地址
     */
    public static String pdf2OneImg(File pdfFile) {

        List<String> imgs = pdf2Img(pdfFile);
        int len = imgs.size();
        File[] src = new File[len];
        BufferedImage[] images = new BufferedImage[len];
        int[][] ImageArrays = new int[len][];
        for (int i = 0; i < len; i++) {
            try {
                src[i] = new File(imgs.get(i));
                if (!src[i].exists()) {
                    throw new RuntimeException("文件【" + imgs.get(i) + "】不存在");
                }
                images[i] = ImageIO.read(src[i]);
            } catch (Exception e) {
                log.error("", e);
                throw new RuntimeException(e);
            }
            int width = images[i].getWidth();
            int height = images[i].getHeight();
            // 从图片中读取RGB 像素
            ImageArrays[i] = new int[width * height];
            ImageArrays[i] = images[i].getRGB(0, 0, width, height, ImageArrays[i], 0, width);
        }

        int dst_height = 0;
        int dst_width = images[0].getWidth();
        // 合成图片像素
        for (int i = 0; i < images.length; i++) {
            dst_width = dst_width > images[i].getWidth() ? dst_width : images[i].getWidth();
            dst_height += images[i].getHeight();
        }
        if (dst_height < 1) {
            throw new RuntimeException("文件合成失败,合成后的图片文件高度=" + dst_height);
        }
        String name = pdfFile.getName().substring(0, pdfFile.getName().lastIndexOf("."));
        String targetPath = pdfFile.getParent() + File.separator + name;
        // 输出路径
        File outFile = new File(targetPath + File.separator + name + "-bigone.jpg");
        // 生成新图片
        try {
            dst_width = images[0].getWidth();
            BufferedImage ImageNew = new BufferedImage(dst_width, dst_height, BufferedImage.TYPE_INT_RGB);
            int height_i = 0;
            for (int i = 0; i < images.length; i++) {
                ImageNew.setRGB(0, height_i, dst_width, images[i].getHeight(), ImageArrays[i], 0, dst_width);
                height_i += images[i].getHeight();
            }
            ImageIO.write(ImageNew, "jpg", outFile);
        } catch (Exception e) {
            log.error("图片合并异常=", e);
            throw new RuntimeException(e);
        }
        return outFile.getPath();
    }

到此这篇关于Java实现pdf转图片案例的文章就介绍到这了,更多相关Java实现pdf转图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java8新特性之stream流中reduce()求和知识总结

    java8新特性之stream流中reduce()求和知识总结

    今天带大家回顾Java8的新特性,文中对stream流中reduce()求和的相关知识作了详细的介绍,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Java SpringSecurity入门案例与基本原理详解

    Java SpringSecurity入门案例与基本原理详解

    这篇文章主要介绍了java中Spring Security的实例详解的相关资料,spring security是一个多方面的安全认证框架,提供了基于JavaEE规范的完整的安全认证解决方案,需要的朋友可以参考下
    2021-09-09
  • 学习Java之如何对时间进行格式化

    学习Java之如何对时间进行格式化

    当我们在默认情况下构造出来的时间对象,它的时间格式并不适合我们阅读,并且在开发时,pc端、Android端、iOS端等展示的时间格式可能也并不完全一样,本文就从这几个问题给大家介绍如何对时间进行格式化,感兴趣的同学可以借鉴一下
    2023-05-05
  • 基于HashMap遍历和使用方法(详解)

    基于HashMap遍历和使用方法(详解)

    下面小编就为大家带来一篇基于HashMap遍历和使用方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java实现音频文件播放功能

    java实现音频文件播放功能

    这篇文章主要为大家详细介绍了java实现音频文件播放功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • SpringBoot使用AOP实现日志记录功能详解

    SpringBoot使用AOP实现日志记录功能详解

    这篇文章主要为大家介绍了SpringBoot使用AOP实现日志记录功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Maven的安装配置详解

    Maven的安装配置详解

    这篇文章主要介绍了Maven的安装配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java解决线程的不安全问题之volatile关键字详解

    Java解决线程的不安全问题之volatile关键字详解

    这篇文章主要介绍了Java解决线程的不安全问题之volatile关键字详解,可见性指一个线程对共享变量值的修改,能够及时地被其他线程看到,而 volatile 关键字就保证内存的可见性,需要的朋友可以参考下
    2023-08-08
  • Java如何实现双向链表功能

    Java如何实现双向链表功能

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表
    2021-11-11
  • 23种设计模式(9) java桥接模式

    23种设计模式(9) java桥接模式

    这篇文章主要为大家详细介绍了java设计模式之桥接模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论