zoukankan      html  css  js  c++  java
  • (转)PDF转图片工具类

    import org.apache.commons.lang3.StringUtils;
    import org.icepdf.core.pobjects.Document;
    import org.icepdf.core.pobjects.Page;
    import org.icepdf.core.util.GraphicsRenderingHints;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.awt.image.RenderedImage;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * FileName: PdfToImageUtil
     * Date:     2018/9/18 17:53
     * 说明:  PDF转图片
     */
    public class PdfToImageUtil {
        static Logger logger = LoggerFactory.getLogger(PdfToImageUtil.class);
    
        // 水印透明度
        private static float alpha = 0.2f;
        // 水印横向位置
        private static int positionWidth = 150;
        // 水印纵向位置
        private static int positionHeight = 300;
        // 水印文字字体
        private static Font font = new Font("仿宋", Font.BOLD, 26);
        // 水印文字颜色
        private static Color color = Color.GRAY;
        // 水印文字
        private static String watermark;
    
        //图片宽度(做成可配置项)
        private static Integer width = 2479;
        //图片高度(做成可配置项)
        private static Integer height = 3508;
        //图片格式(做成可配置项)
        private static String imgType = "png";
    
    
        public PdfToImageUtil() {
        }
    
        /**
         * 有参构造,传参水印文字,生成图片时根据是否传参选择是否生成水印
         *
         * @param watermark 水印内容
         */
        public PdfToImageUtil(String watermark) {
            this.watermark = watermark;
        }
    
        //设置水印
        public static BufferedImage setGraphics(BufferedImage bfimage) {
            Graphics2D g = bfimage.createGraphics();
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            // 5、设置水印文字颜色
            g.setColor(color);
            // 6、设置水印文字Font
            g.setFont(font);
            // 7、设置水印文字透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
            //设置旋转
            g.rotate(-Math.PI / 6);
            g.drawString(watermark, 0, (bfimage.getHeight() / 2) * 1);
            // 9、释放资源
            g.dispose();
            return bfimage;
        }
    
        /**
         * @date: 2018/9/18 17:55
         * @param: [inputFile] pdf文件路径
         * @return: java.util.List<java.lang.String> 图片地址列表
         * @Description: pdf文件转图片
         */
        public static List<String> pdfToIamge(String inputFile) {
            //获取inputFile的后缀名前的内容,如:"e:/test.pptx"的后缀名为:"e:/test"
            String imgPath_start = inputFile.substring(0, inputFile.lastIndexOf("."));
    
            List<String> list=null;
            Document document = null;
            try {
    
                document = new Document();
                document.setFile(inputFile);
                float rotation = 0; //旋转角度
                int maxPages = document.getPageTree().getNumberOfPages();
    
                list = new ArrayList<String>(maxPages);
                for (int i = 0; i < maxPages; i++) {
                    //zoom 缩放比例 ,记住这里调清晰度,我用的是8.5超清晰,9以上就报错了
                    BufferedImage bfimage = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, 2.1f);
                    //设置图片的宽和高
                    Image tempImage = bfimage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
                    BufferedImage biTemp = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                    Graphics gTemp = biTemp.getGraphics();
                    gTemp.drawImage(tempImage, 0, 0, null);
                    //加水印
                    /*if (StringUtils.isNotBlank(watermark)) {
                        biTemp = setGraphics(biTemp);
                    }*/
                    RenderedImage rendImage = biTemp;
                    //拼接图片地址
                    String imgPath = imgPath_start + "_" + i + "." + imgType;
                    ImageIO.write(rendImage, imgType, new File(imgPath));
                    bfimage.flush();
                    list.add(imgPath);
                }
            } catch (Exception e) {
                logger.error("pdf转化图片出错!", e);
            }
    
            if (document != null) {
                document.dispose();
            }
            return list;
        }
    
        public void setWidth(Integer width) {
            PdfToImageUtil.width = width;
        }
    
        public void setHeight(Integer height) {
            PdfToImageUtil.height = height;
        }
    
        public void setImgType(String imgType) {
            PdfToImageUtil.imgType = imgType;
        }
    }
  • 相关阅读:
    eventbus3-intellij-plugin插件搜不到
    flutter控件之CheckBox
    Java中常见数据结构:list与map -底层如何实现
    flutter控件之RadioButton
    git add Untracked files
    执行git push出现"Everything up-to-date"
    用flutter写一个精美的登录页面
    Android Studio最全插件整理
    Mac下git的环境搭建和基本使用
    上周热点回顾(7.1-7.7)团队
  • 原文地址:https://www.cnblogs.com/RivenLw/p/10309393.html
Copyright © 2011-2022 走看看