根据pdf模板导入数据生成pdf并下载到指定位置-java版

1、导入依赖

<!--PDF-->
        <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
     

2、生成pdf

 public void createPDF(List<DeviceUserParamVo> tbEquipInfos, String baseUrl, String path){
        List<PdfReader> list = new ArrayList();
        try {
            int pageNum = 1;
            for (DeviceUserParamVo tbEquipInfo: tbEquipInfos) {
                //项目路径

                final BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

                final String[] splits = tbEquipInfo.getDevicePhoto().split(";");
//                PdfReader reader= new PdfReader("C:\\Users\\Administrator\\Desktop\\sd.pdf");
                ClassPathResource classPathResource = new ClassPathResource("pdfTemplate/sd.pdf");
                InputStream inputStream = classPathResource.getInputStream();
                PdfReader reader= new PdfReader(inputStream);
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                PdfReader pdfReader = null;
                PdfStamper ps = new PdfStamper(reader, bos);
                //提取表单
                AcroFields s = ps.getAcroFields();
                s.setFieldProperty("XM", "textfont", font, null);
                s.setFieldProperty("SFZH", "textfont", font, null);
                s.setFieldProperty("SZS", "textfont", font, null);
                s.setFieldProperty("SZSHI", "textfont", font, null);
                s.setFieldProperty("SZX", "textfont", font, null);
                s.setFieldProperty("SZZ", "textfont", font, null);
                s.setFieldProperty("SZC", "textfont", font, null);
                s.setFieldProperty("XXDZ", "textfont", font, null);
                s.setFieldProperty("GZLX", "textfont", font, null);
                s.setFieldProperty("SBPP", "textfont", font, null);
                s.setFieldProperty("SBXH", "textfont", font, null);
                s.setFieldProperty("CNMJ", "textfont", font, null);
                s.setFieldProperty("DBH", "textfont", font, null);
                s.setFieldProperty("AZRY", "textfont", font, null);
                s.setFieldProperty("AZRYLXFS", "textfont", font, null);
                s.setField("XM" , tbEquipInfo.getName()==null ? "":tbEquipInfo.getName());
                s.setField("LXFS",tbEquipInfo.getPhoneNumber() == null ? "" :tbEquipInfo.getPhoneNumber());
                s.setField("SFZH",tbEquipInfo.getCardId() == null ? "" :tbEquipInfo.getCardId());
                s.setField("GDDH",tbEquipInfo.getLandlineNumber() == null ? "" :tbEquipInfo.getLandlineNumber());
                s.setField("SZS",tbEquipInfo.getProvince() == null ? "" :tbEquipInfo.getProvince());
                s.setField("SZSHI",tbEquipInfo.getCity() == null ? "" :tbEquipInfo.getCity());
                s.setField("SZX",tbEquipInfo.getCounty() == null ? "" :tbEquipInfo.getCounty());
                s.setField("SZZ",tbEquipInfo.getTown() == null ? "" :tbEquipInfo.getTown());
                s.setField("SZC",tbEquipInfo.getVillage() == null ? "" :tbEquipInfo.getVillage());
                s.setField("XXDZ",tbEquipInfo.getAddress() == null ? "" :tbEquipInfo.getAddress());
                s.setField("SBBM",tbEquipInfo.getDeviceNumber() == null ? "" :tbEquipInfo.getDeviceNumber());
                s.setField("GZLX",tbEquipInfo.getRemouldTypeName() == null ? "" :tbEquipInfo.getRemouldTypeName());
                s.setField("SBPP",tbEquipInfo.getDeviceBrandName() == null ? "" :tbEquipInfo.getDeviceBrandName());
                s.setField("SBXH",tbEquipInfo.getDeviceTypeName() == null ? "" :tbEquipInfo.getDeviceTypeName());
                s.setField("CNMJ",tbEquipInfo.getHeatingArea() == null ? "" :tbEquipInfo.getHeatingArea());
                s.setField("DBH",tbEquipInfo.getMeterNumber() == null ? "" :tbEquipInfo.getMeterNumber());
                s.setField("AZRY",tbEquipInfo.getInstaller() == null ? "" :tbEquipInfo.getInstaller());
                s.setField("AZRYLXFS",tbEquipInfo.getInstallerPhone() == null ? "" :tbEquipInfo.getInstallerPhone());
                s.setField("SBJHRQ",tbEquipInfo.getActivationDate() == null ? "" :tbEquipInfo.getActivationDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                s.setField("PAGE",pageNum+"");
                PdfContentByte underContent = ps.getOverContent(1);
                if(splits.length == 1){//一张图片
                    final Rectangle tu = s.getFieldPositions("TU").get(0).position;
                    URL url = new URL(splits[0]);
                    final Image image = Image.getInstance(url);
                    if(image != null){
                        float width = image.getPlainWidth();
                        float height = image.getPlainHeight();
                        if(height > width){//纵向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth(), (float)(tu.getHeight()*0.9));
                            // 添加图片
                            image.setAbsolutePosition(100,60);
                            underContent.addImage(image);
                        }else{//横向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit((float)(tu.getWidth()*0.9), (float)(tu.getHeight()*0.9));
                            // 添加图片
                            image.setAbsolutePosition(100,60);
                            underContent.addImage(image);
                        }
                    }

                }else if(splits.length == 2){//两张图片
                    final Rectangle tu = s.getFieldPositions("TU").get(0).position;
                    URL url = new URL(splits[0]);
                    final Image image = Image.getInstance(url);
                    if(image != null){
                        float width = image.getPlainWidth();
                        float height = image.getPlainHeight();
                        if (height > width) {//纵向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(100,60);
                            underContent.addImage(image);
                        }else{//横向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(82,120);
                            underContent.addImage(image);
                        }
                    }
                    URL url2 = new URL(splits[1]);
                    final Image image2 = Image.getInstance(url2);
                    if(image2 != null){
                        float width = image2.getPlainWidth();
                        float height = image2.getPlainHeight();
                        if(height > width){//纵向图片
                            // 根据域的大小缩放图片
                            image2.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image2.setAbsolutePosition(100+tu.getWidth()/2,60);
                            underContent.addImage(image2);
                        }else{//横向图片
                            // 根据域的大小缩放图片
                            image2.scaleToFit(tu.getWidth()/2, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image2.setAbsolutePosition(82+tu.getWidth()/2,120);
                            underContent.addImage(image2);
                        }
                    }
                }else if(splits.length == 3){
                    final Rectangle tu = s.getFieldPositions("TU").get(0).position;
                    URL url = new URL(splits[0]);
                    Image image = Image.getInstance(url);
                    if(image != null){
                        float width = image.getPlainWidth();
                        float height = image.getPlainHeight();
                        if(height > width){//纵向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(80,60);
                            underContent.addImage(image);
                        }else{//横向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(82,120);
                            underContent.addImage(image);
                        }

                    }
                    url = new URL(splits[1]);
                    image = Image.getInstance(url);
                    if(image != null){
                        float width = image.getPlainWidth();
                        float height = image.getPlainHeight();
                        if(height > width){//纵向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(80+tu.getWidth()/3,60);
                            underContent.addImage(image);
                        }else{//横向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(82+tu.getWidth()/3,120);
                            underContent.addImage(image);
                        }

                    }
                    url = new URL(splits[2]);
                    image = Image.getInstance(url);
                    if(image != null){
                        float width = image.getPlainWidth();
                        float height = image.getPlainHeight();
                        if(height > width){//纵向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(80+tu.getWidth()/3*2,60);
                            underContent.addImage(image);
                        }else{//横向图片
                            // 根据域的大小缩放图片
                            image.scaleToFit(tu.getWidth()/3, (float) ((tu.getHeight()*0.9)));
                            // 添加图片
                            image.setAbsolutePosition(82+tu.getWidth()/3*2,120);
                            underContent.addImage(image);
                        }
                    }
                }
                ps.setFormFlattening(true);
                ps.close();
                pdfReader = new PdfReader(bos.toByteArray());
                list.add(pdfReader);
                pageNum++;
            }
            Document document = new Document();
            OutputStream outputStream = new FileOutputStream(new File(baseUrl+path+".pdf"));
//            OutputStream outputStream = new FileOutputStream(new File("E:\\"+path+".pdf"));
            PdfCopy copy = new PdfCopy(document, outputStream);
            document.open();
            for (int k = 0; k < list.size(); k++) {

                PdfReader pdfReader = list.get(k);
                document.newPage();
                copy.addDocument(pdfReader);
            }
            copy.close();
        }catch (Exception e){
            e.printStackTrace();
            log.error("=======导出pdf===="+e.getMessage());
        }


    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值