zoukankan      html  css  js  c++  java
  • 图片转PDF

    <!--图片转pdf-->
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.1.2</version>
            </dependency>
     /**
         * 生成pdf流
         * @param dataList
         * @param outputStream
         */
        public void printToPdf(List<SettlementDocumentItemDto> dataList, OutputStream outputStream) throws Exception{
            //原图
            var imgName = "jsd1.jpg";
            ClassPathResource classPathResource = new ClassPathResource(imgName);
    
            //坐标填充
            List<com.itextpdf.text.Image> images = dataList.stream().map(data -> {
                com.itextpdf.text.Image image = null;
                try {
                    BufferedImage bufferedImage = ImageIO.read(classPathResource.getInputStream());
                    Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
                    g2d.setColor(Color.BLACK);
                    g2d.setStroke(new BasicStroke(5));
                    g2d.setFont(new Font("宋体", Font.PLAIN, 23));
                    convertGraphics2D(data, g2d);
    
                    //压缩图片,通过压缩图片质量,保持原图大小
                    JPEGImageWriteParam imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);
                    imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT); // 指定压缩方式为MODE_EXPLICIT
                    imgWriteParams.setCompressionQuality((float)0);                  // 指定压缩的程度,参数qality是取值0~1范围内,
                    imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
    
                    var formatName = imgName.contains(".jpg") ? "PNG" : "JPG";
                    ImageWriter imgWrier = ImageIO.getImageWritersByFormatName(formatName).next();
                    imgWrier.reset();
                    ByteArrayOutputStream imageOutputStream = new ByteArrayOutputStream();
                    imgWrier.setOutput(ImageIO.createImageOutputStream(imageOutputStream)); // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造
                    IIOImage iioImage = new IIOImage(bufferedImage, null, null);
                    imgWrier.write(null, iioImage, imgWriteParams); // 调用write方法,就可以向输入流写图片
    
                    //ImageIO.write(bufferedImage, formatName, imageOutputStream);
                    image = com.itextpdf.text.Image.getInstance(imageOutputStream.toByteArray());
                    imageOutputStream.close();
                }catch (Exception e) {
                    log.error("图片转pdf报错", e);
                }
                return image;
            }).collect(Collectors.toList());
            //转pdf
            FileUtils.imgForPdf(images, outputStream);
    
            outputStream.close();
    
        }
    
        private void convertGraphics2D(SettlementDocumentItemDto item, Graphics2D g2d) {
            g2d.drawString("", map.get("twoCode").getX(), map.get("twoCode").getY()); //二维码
            g2d.drawString(item.getSfhb(), map.get("sfhb").getX(), map.get("sfhb").getY());//是否换表
    
            var clientName = item.getHm();
            if(clientName.length() > 13) {
                var clientName1 = clientName.substring(0,14);
                var clientName2 = clientName.substring(14);
                g2d.drawString(clientName1, map.get("hm").getX(), map.get("hm").getY());
                g2d.drawString(clientName2, map.get("hm1").getX(), map.get("hm1").getY());
            }else{
                g2d.drawString(clientName, map.get("hm").getX(), map.get("hm").getY()); //户名
            }
            g2d.drawString(item.getFdhh(), map.get("fdhh").getX(), map.get("fdhh").getY());//发电户号
            g2d.drawString(item.getBwrl(), map.get("bwrl").getX(), map.get("bwrl").getY());//并网容量
            g2d.drawString(item.getFddz(), map.get("fddz").getX(), map.get("fddz").getY());//发电地址
            g2d.drawString(item.getYzbm(), map.get("yzbm").getX(), map.get("yzbm").getY());//邮政编码
            g2d.drawString(item.getXmlxr(), map.get("xmlxr").getX(), map.get("xmlxr").getY());//项目联系人
            g2d.drawString(item.getLxdh(), map.get("lxdh").getX(), map.get("lxdh").getY());//联系电话
            g2d.drawString(item.getYhzh(), map.get("yhzh").getX(), map.get("yhzh").getY());//银行账户
            g2d.drawString(item.getKhyh(), map.get("khyh").getX(), map.get("khyh").getY());//开户银行
    
            g2d.drawString(item.getJszq(), map.get("jszq").getX(), map.get("jszq").getY());//计算周期
            var jsList = item.getJsList();
            jsList.forEach(jsItem -> {
                if(jsItem.getJslx().equals("上网电费")){
                    g2d.drawString(jsItem.getCcbh(), map.get("ccbh1").getX(), map.get("ccbh1").getY());
                    g2d.drawString(jsItem.getScss(), map.get("scss1").getX(), map.get("scss1").getY());
                    g2d.drawString(jsItem.getBcss(), map.get("bcss1").getX(), map.get("bcss1").getY());
                    g2d.drawString(jsItem.getBl(), map.get("bl1").getX(), map.get("bl1").getY());
                    g2d.drawString(jsItem.getCjdl(), map.get("cjdl1").getX(), map.get("cjdl1").getY());
                    g2d.drawString(jsItem.getJsbz(), map.get("jsbz1").getX(), map.get("jsbz1").getY());
                    g2d.drawString(jsItem.getJsje(), map.get("jsje1").getX(), map.get("jsje1").getY());
                }else if(jsItem.getJslx().equals("补助国家资金")){
                    g2d.drawString(jsItem.getCcbh(), map.get("ccbh2").getX(), map.get("ccbh2").getY());
                    g2d.drawString(jsItem.getScss(), map.get("scss2").getX(), map.get("scss2").getY());
                    g2d.drawString(jsItem.getBcss(), map.get("bcss2").getX(), map.get("bcss2").getY());
                    g2d.drawString(jsItem.getBl(), map.get("bl2").getX(), map.get("bl2").getY());
                    g2d.drawString(jsItem.getCjdl(), map.get("cjdl2").getX(), map.get("cjdl2").getY());
                    g2d.drawString(jsItem.getJsbz(), map.get("jsbz2").getX(), map.get("jsbz2").getY());
                    g2d.drawString(jsItem.getJsje(), map.get("jsje2").getX(), map.get("jsje2").getY());
                }else if(jsItem.getJslx().equals("补助地方资金")){
                    g2d.drawString(jsItem.getCcbh(), map.get("ccbh3").getX(), map.get("ccbh3").getY());
                    g2d.drawString(jsItem.getScss(), map.get("scss3").getX(), map.get("scss3").getY());
                    g2d.drawString(jsItem.getBcss(), map.get("bcss3").getX(), map.get("bcss3").getY());
                    g2d.drawString(jsItem.getBl(), map.get("bl3").getX(), map.get("bl3").getY());
                    g2d.drawString(jsItem.getCjdl(), map.get("cjdl3").getX(), map.get("cjdl3").getY());
                    g2d.drawString(jsItem.getJsbz(), map.get("jsbz3").getX(), map.get("jsbz3").getY());
                    g2d.drawString(jsItem.getJsje(), map.get("jsje3").getX(), map.get("jsje3").getY());
                }
            });
            g2d.drawString(item.getXj(), map.get("xj").getX(), map.get("xj").getY());//小计
            g2d.drawString(item.getJedx(), map.get("jedx").getX(), map.get("jedx").getY());//金额大写
    
            var pjList = item.getPjList();
            pjList.forEach(pjItem -> {
                if(pjItem.getXm().equals("1")) {
                    g2d.drawString(pjItem.getSl(), map.get("sl1").getX(), map.get("sl1").getY());
                    g2d.drawString(pjItem.getMoney(), map.get("money1").getX(), map.get("money1").getY());
                    g2d.drawString(pjItem.getTaxMoney(), map.get("taxMoney1").getX(), map.get("taxMoney1").getY());
                }else if(pjItem.getXm().equals("2")){
                    g2d.drawString(pjItem.getSl(), map.get("sl2").getX(), map.get("sl2").getY());
                    g2d.drawString(pjItem.getMoney(), map.get("money2").getX(), map.get("money2").getY());
                    g2d.drawString(pjItem.getTaxMoney(), map.get("taxMoney2").getX(), map.get("taxMoney2").getY());
                }
            });
            g2d.drawString(item.getHjje(), map.get("hjje").getX(), map.get("hjje").getY());//合计金额
    
            g2d.drawString(item.getZybz(), map.get("zybz").getX(), map.get("zybz").getY());//中央补助单价
            g2d.drawString(item.getDfbz(), map.get("dfbz").getX(), map.get("dfbz").getY());//地方补助单价
            g2d.drawString(item.getZzsbfb(), map.get("zzsbfb").getX(), map.get("zzsbfb").getY());//发票百分比
        }

    图片转pdf

        public static boolean imgForPdf(List<com.itextpdf.text.Image> images, OutputStream outputStream) throws Exception{
            log.info("批量图片转pdf");
            Document document = new Document();
            document.setMargins(0, 0, 0, 0);
            PdfWriter.getInstance(document, outputStream);
            document.open();
            try {
                for (Image image : images) {
                    image.setAlignment(Image.ALIGN_CENTER);
                    image.scaleAbsolute(image.getWidth(), image.getHeight());
                    document.setPageSize(new Rectangle(image.getWidth(), image.getHeight()));
                    document.newPage();
                    document.add(image);
                }
            } catch (Exception e) {
                log.error("imgForPdf错误", e);
                return false;
            }
            document.close();
            return true;
        }
    public static boolean imgUrlForPdf(List<String> imgUrlList, OutputStream outputStream) throws Exception{
            log.info("图片转pdf");
            Document document = new Document();
            document.setMargins(0, 0, 0, 0);
            PdfWriter.getInstance(document, outputStream);
            document.open();
            for (var url : imgUrlList) {
                try {
                    var image = Image.getInstance(url);
                    image.setAlignment(Image.ALIGN_CENTER);
                    image.scaleAbsolute(image.getWidth(), image.getHeight());
                    document.setPageSize(new Rectangle(image.getWidth(), image.getHeight()));
                    document.newPage();
                    document.add(image);
                } catch (Exception e) {
                    log.error("imgForPdf错误", e);
                    return false;
                }
            }
            document.close();
            return true;
        }

    如果出现中文乱码, 可能是服务器没有"宋体" Font

  • 相关阅读:
    css实现导航栏切换动画
    ubuntu系统下mysql重置密码和修改密码操作
    Ubuntu16.04 安装配置nginx,实现多项目管理、负载均衡
    每天一点点之数据结构与算法
    vuex基本使用
    在 npm 中如何用好 registry
    django模板
    skywalking 通过python探针监控Python 微服务应用性能
    Centos7新加磁盘扩容根分区
    python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
  • 原文地址:https://www.cnblogs.com/smileblogs/p/12709528.html
Copyright © 2011-2022 走看看