关于pdf和其zip格式的导出

该代码片段展示了如何使用iTextPDF库在Java中生成PDF转账凭证。根据输入参数,它创建包含转账详细信息如付款人、收款人、金额、时间戳等的PDF文档,并可能作为单一PDF或压缩的多份PDF文件返回。此外,每个PDF还包含了公司印章的图片。
摘要由CSDN通过智能技术生成
/**
     * 生成转账PDF
     * @param withdrawPdfMoreQO
     * @return
     */
    @PostMapping("/transfer/pdf")
    public HttpServletResponse transferPdf(HttpServletResponse response, @RequestBody @Validated WithdrawPdfMoreQO withdrawPdfMoreQO) throws Exception {
        if(withdrawPdfMoreQO.getQos().size() == 1 && withdrawPdfMoreQO.getMark() == 1){
            WithdrawPdfQO qo = withdrawPdfMoreQO.getQos().get(0);
            qo.setUppperAmount(UpperNumberUtil.convert(qo.getAmount()));
            qo.setTransTime(DateUtils.transDateToStrigForPattern(DateUtils.tranTimestampForDate(qo.getTime()), "yyyy-MM-dd HH:mm:ss"));

            response.setContentType("application/pdf");
            response.setHeader("Expires", "0");
            response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
            response.setHeader("Pragma", "public");
            //建立文档
            Document document = new Document(PageSize.A4);
            PdfWriter.getInstance(document, response.getOutputStream());
            //1.设置页边距
            document.setMargins(30, 30, 100, 100);
            // 3.打开文档
            document.open();
            //设置字体
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            com.itextpdf.text.Font titlefont = new com.itextpdf.text.Font(bfChinese, 25, com.itextpdf.text.Font.BOLD);
            com.itextpdf.text.Font sideTitlefont = new com.itextpdf.text.Font(bfChinese, 10, com.itextpdf.text.Font.NORMAL);
            com.itextpdf.text.Font textfont = new com.itextpdf.text.Font(bfChinese, 12, com.itextpdf.text.Font.NORMAL);

            //设置段落
            Paragraph paragraph = new Paragraph();
            paragraph.setAlignment(1); //设置文字居中 0靠左   1,居中     2,靠右
            paragraph.add(new Chunk("香港创一控股有限公司", titlefont));
            paragraph.add(new Chunk("   "));
            paragraph.add(new Chunk("电子回单", sideTitlefont));
            paragraph.setSpacingAfter(50f);// 设置段落下空白
            document.add(paragraph);

            Paragraph p1 = new Paragraph();
            p1.setIndentationLeft(76);// 左缩进
            p1.add(new Chunk("付款人户名:", textfont));
            p1.add(new Chunk("      "));
            p1.add(new Chunk("香港创一控股有限公司", textfont));
            p1.setSpacingAfter(18f);// 设置段落下空白
            document.add(p1);

            Paragraph p2 = new Paragraph();
            p2.setIndentationLeft(76);// 左缩进
            p2.add(new Chunk("收款人户名:", textfont));
            p2.add(new Chunk("      "));
            p2.add(new Chunk(qo.getPayee(), textfont));
            p2.setSpacingAfter(18f);// 设置段落下空白
            document.add(p2);

            Paragraph p3 = new Paragraph();
            p3.setIndentationLeft(76);// 左缩进
            p3.add(new Chunk("收款人账号:", textfont));
            p3.add(new Chunk("      "));
            p3.add(new Chunk(qo.getAccount(), textfont));
            p3.setSpacingAfter(18f);// 设置段落下空白
            document.add(p3);

            Paragraph p4 = new Paragraph();
            p4.setIndentationLeft(50);// 左缩进
            p4.add(new Chunk("收款人开户银行:", textfont));
            p4.add(new Chunk("      "));
            p4.add(new Chunk(qo.getBank(), textfont));
            p4.setSpacingAfter(18f);// 设置段落下空白
            document.add(p4);

            Paragraph p5 = new Paragraph();
            p5.setIndentationLeft(63);// 左缩进
            p5.add(new Chunk("金额(" + qo.getCurrency() +"):", textfont));
            p5.add(new Chunk("      "));
            p5.add(new Chunk(qo.getAmount(), textfont));
            p5.setSpacingAfter(18f);// 设置段落下空白
            document.add(p5);

            Paragraph p6 = new Paragraph();
            p6.setIndentationLeft(63);// 左缩进
            p6.add(new Chunk("金额(大写):", textfont));
            p6.add(new Chunk("       "));
            p6.add(new Chunk(qo.getUppperAmount(), textfont));
            p6.setSpacingAfter(18f);// 设置段落下空白
            document.add(p6);

            Paragraph p7 = new Paragraph();
            p7.setIndentationLeft(110);// 左缩进
            p7.add(new Chunk("汇率:", textfont));
            p7.add(new Chunk("      "));
            p7.add(new Chunk(qo.getExchangeRate(), textfont));
            p7.setSpacingAfter(18f);// 设置段落下空白
            document.add(p7);

            Paragraph p8 = new Paragraph();
            p8.setIndentationLeft(110);// 左缩进
            p8.add(new Chunk("摘要:", textfont));
            p8.add(new Chunk("      "));
            p8.add(new Chunk("转账电子回单", textfont));
            p8.setSpacingAfter(18f);// 设置段落下空白
            document.add(p8);

            Paragraph p9 = new Paragraph();
            p9.setIndentationLeft(77);// 左缩进
            p9.add(new Chunk("交易流水号:", textfont));
            p9.add(new Chunk("      "));
            p9.add(new Chunk(qo.getSerialNo(), textfont));
            p9.setSpacingAfter(18f);// 设置段落下空白
            document.add(p9);

            Paragraph p10 = new Paragraph();
            p10.setIndentationLeft(100);// 左缩进
            p10.add(new Chunk("时间戳:", textfont));
            p10.add(new Chunk("      "));
            p10.add(new Chunk(qo.getTransTime(), textfont));
            p10.setSpacingAfter(50f);// 设置段落下空白
            document.add(p10);

            Paragraph p11 = new Paragraph();
            p11.setIndentationLeft(150);// 左缩进
            p11.add(new Chunk("附言", textfont));
            p11.add(new Chunk("      "));
            p11.add(new Chunk("", textfont));
            p11.setSpacingAfter(20f);// 设置段落下空白
            document.add(p11);

            //图片
            Image image1 = Image.getInstance("https://images.coralglobal.cn/picture/newuser/cy-seal.png");
            //设置图片位置的x轴和y周
            image1.setAbsolutePosition(400f, 170f);
            //设置图片的宽度和高度
            image1.scaleAbsolute(100, 130);
            //将图片1添加到pdf文件中
            document.add(image1);
            document.close();
            return response;
        }else{
            response.setContentType("application/zip");
            response.setHeader("Expires", "0");
            response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
            response.setHeader("Pragma", "public");
            ZipOutputStream zipOutput = new ZipOutputStream(response.getOutputStream(), Charset.forName("GBK"));
            for(WithdrawPdfQO qo : withdrawPdfMoreQO.getQos()){
                Long serialNo = System.currentTimeMillis();
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                String pdfName = serialNo + "-" + qo.getPayee() + "-" + qo.getCurrency() + qo.getAmount() + ".pdf";

                qo.setUppperAmount(UpperNumberUtil.convert(qo.getAmount()));
                qo.setTransTime(DateUtils.transDateToStrigForPattern(DateUtils.tranTimestampForDate(qo.getTime()), "yyyy-MM-dd HH:mm:ss"));

                //建立文档
                Document document = new Document(PageSize.A4);
                PdfWriter.getInstance(document, outputStream);
                //1.设置页边距
                document.setMargins(30, 30, 100, 100);
                // 3.打开文档
                document.open();
                //设置字体
                BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                com.itextpdf.text.Font titlefont = new com.itextpdf.text.Font(bfChinese, 25, com.itextpdf.text.Font.BOLD);
                com.itextpdf.text.Font sideTitlefont = new com.itextpdf.text.Font(bfChinese, 10, com.itextpdf.text.Font.NORMAL);
                com.itextpdf.text.Font textfont = new com.itextpdf.text.Font(bfChinese, 12, com.itextpdf.text.Font.NORMAL);

                //设置段落
                Paragraph paragraph = new Paragraph();
                paragraph.setAlignment(1); //设置文字居中 0靠左   1,居中     2,靠右
                paragraph.add(new Chunk("香港创一控股有限公司", titlefont));
                paragraph.add(new Chunk("   "));
                paragraph.add(new Chunk("电子回单", sideTitlefont));
                paragraph.setSpacingAfter(50f);// 设置段落下空白
                document.add(paragraph);

                Paragraph p1 = new Paragraph();
                p1.setIndentationLeft(76);// 左缩进
                p1.add(new Chunk("付款人户名:", textfont));
                p1.add(new Chunk("      "));
                p1.add(new Chunk("香港创一控股有限公司", textfont));
                p1.setSpacingAfter(18f);// 设置段落下空白
                document.add(p1);

                Paragraph p2 = new Paragraph();
                p2.setIndentationLeft(76);// 左缩进
                p2.add(new Chunk("收款人户名:", textfont));
                p2.add(new Chunk("      "));
                p2.add(new Chunk(qo.getPayee(), textfont));
                p2.setSpacingAfter(18f);// 设置段落下空白
                document.add(p2);

                Paragraph p3 = new Paragraph();
                p3.setIndentationLeft(76);// 左缩进
                p3.add(new Chunk("收款人账号:", textfont));
                p3.add(new Chunk("      "));
                p3.add(new Chunk(qo.getAccount(), textfont));
                p3.setSpacingAfter(18f);// 设置段落下空白
                document.add(p3);

                Paragraph p4 = new Paragraph();
                p4.setIndentationLeft(50);// 左缩进
                p4.add(new Chunk("收款人开户银行:", textfont));
                p4.add(new Chunk("      "));
                p4.add(new Chunk(qo.getBank(), textfont));
                p4.setSpacingAfter(18f);// 设置段落下空白
                document.add(p4);

                Paragraph p5 = new Paragraph();
                p5.setIndentationLeft(63);// 左缩进
                p5.add(new Chunk("金额(" + qo.getCurrency() +"):", textfont));
                p5.add(new Chunk("      "));
                p5.add(new Chunk(qo.getAmount(), textfont));
                p5.setSpacingAfter(18f);// 设置段落下空白
                document.add(p5);

                Paragraph p6 = new Paragraph();
                p6.setIndentationLeft(63);// 左缩进
                p6.add(new Chunk("金额(大写):", textfont));
                p6.add(new Chunk("       "));
                p6.add(new Chunk(qo.getUppperAmount(), textfont));
                p6.setSpacingAfter(18f);// 设置段落下空白
                document.add(p6);

                Paragraph p7 = new Paragraph();
                p7.setIndentationLeft(110);// 左缩进
                p7.add(new Chunk("汇率:", textfont));
                p7.add(new Chunk("      "));
                p7.add(new Chunk(qo.getExchangeRate(), textfont));
                p7.setSpacingAfter(18f);// 设置段落下空白
                document.add(p7);

                Paragraph p8 = new Paragraph();
                p8.setIndentationLeft(110);// 左缩进
                p8.add(new Chunk("摘要:", textfont));
                p8.add(new Chunk("      "));
                p8.add(new Chunk("转账电子回单", textfont));
                p8.setSpacingAfter(18f);// 设置段落下空白
                document.add(p8);

                Paragraph p9 = new Paragraph();
                p9.setIndentationLeft(77);// 左缩进
                p9.add(new Chunk("交易流水号:", textfont));
                p9.add(new Chunk("      "));
                p9.add(new Chunk(qo.getSerialNo(), textfont));
                p9.setSpacingAfter(18f);// 设置段落下空白
                document.add(p9);

                Paragraph p10 = new Paragraph();
                p10.setIndentationLeft(100);// 左缩进
                p10.add(new Chunk("时间戳:", textfont));
                p10.add(new Chunk("      "));
                p10.add(new Chunk(qo.getTransTime(), textfont));
                p10.setSpacingAfter(50f);// 设置段落下空白
                document.add(p10);

                Paragraph p11 = new Paragraph();
                p11.setIndentationLeft(150);// 左缩进
                p11.add(new Chunk("附言", textfont));
                p11.add(new Chunk("      "));
                p11.add(new Chunk("", textfont));
                p11.setSpacingAfter(20f);// 设置段落下空白
                document.add(p11);

                //图片
                Image image1 = Image.getInstance("https://images.coralglobal.cn/picture/newuser/cy-seal.png");
                //设置图片位置的x轴和y周
                image1.setAbsolutePosition(400f, 170f);
                //设置图片的宽度和高度
                image1.scaleAbsolute(100, 130);
                //将图片1添加到pdf文件中
                document.add(image1);

                document.close();
                zipOutput.putNextEntry(new ZipEntry(pdfName));
                zipOutput.write(outputStream.toByteArray());
            }
            zipOutput.close();
            return response;
        }
    }

用的是itextpdf工具包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值