zoukankan      html  css  js  c++  java
  • PDF转jpg

    /***
         * @Author: pmy
         * @Description: PDF转JPG
         * @Date: 2020/11/18 16:30
         * @Params: [is]文件输入流
         * @Return byte[]字节数组
         */
        public static byte[] toJpg(InputStream is) {
            try {
                PDDocument pdf = PDDocument.load(is);
                int actSize = pdf.getNumberOfPages();
                List<BufferedImage> piclist = new ArrayList<>();
                for (int i = 0; i < actSize; i++) {
                    BufferedImage image = new PDFRenderer(pdf).renderImageWithDPI(i, 200,
                            ImageType.RGB);
                    piclist.add(image);
                }
                byte[] bytes = yPic(piclist);
                return bytes;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    
    
    /***
         * @Author: pmy
         * @Description: 多页PDF时 将宽度相同的图片,竖向追加在一起 注意:宽度必须相同
         * @Date: 2020/11/18 16:38
         * @Params: 文件流数组
         * @Return  字节数组
         */
        public static byte[] yPic(List<BufferedImage> piclist) {// 纵向处理图片
            if (piclist == null || piclist.size() <= 0) {
                System.out.println("图片数组为空!");
                return null;
            }
            try {
                int height = 0, // 总高度
                        width = 0, // 总宽度
                        _height = 0, // 临时的高度 , 或保存偏移高度
                        __height = 0, // 临时的高度,主要保存每个高度
                        picNum = piclist.size();// 图片的数量
                int[] heightArray = new int[picNum]; // 保存每个文件的高度
                BufferedImage buffer = null; // 保存图片流
                List<int[]> imgRGB = new ArrayList<int[]>(); // 保存所有的图片的RGB
                int[] _imgRGB; // 保存一张图片中的RGB数据
                for (int i = 0; i < picNum; i++) {
                    buffer = piclist.get(i);
                    heightArray[i] = _height = buffer.getHeight();// 图片高度
                    if (i == 0) {
                        width = buffer.getWidth();// 图片宽度
                    }
                    height += _height; // 获取总高度
                    _imgRGB = new int[width * _height];// 从图片中读取RGB
                    _imgRGB = buffer.getRGB(0, 0, width, _height, _imgRGB, 0, width);
                    imgRGB.add(_imgRGB);
                }
                _height = 0; // 设置偏移高度为0
                // 生成新图片
                BufferedImage imageResult = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
                for (int i = 0; i < picNum; i++) {
                    __height = heightArray[i];
                    if (i != 0)
                        _height += __height; // 计算偏移高度
                    imageResult.setRGB(0, _height, width, __height, imgRGB.get(i), 0, width); // 写入流中
                }
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                boolean flag = ImageIO.write(imageResult, "jpg", out);
                byte[] b = out.toByteArray();
                //File outFile = new File("H:\temp.jpg");
                //ImageIO.write(imageResult, "jpg", outFile);// 写图片到本地
                return b;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
  • 相关阅读:
    JavaScript 数据类型判断
    使用渐进增强的方式美化复选框样式
    使用 Bootstrap 和 HTML5 Boilerplate 开始一个项目
    CSS基础知识之文本属性二三事
    精简CSS代码
    CSS选择器特殊性与重要性
    面试官:能解释一下javascript中的this吗
    VueRouter爬坑第四篇-命名路由、编程式导航
    Vuex实践(下)-mapState和mapGetters
    Vuex实践(中)-多module中的state、mutations、actions和getters
  • 原文地址:https://www.cnblogs.com/pan-my/p/15423450.html
Copyright © 2011-2022 走看看