Spring boot+itextpdf 生成pdf简单应用

本文介绍了如何使用Maven引入iTextPDF库,在Java中创建包含中文和表格的PDF文件,展示了创建文档、设置字体、表格结构和数据填充的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引入maveny依赖

			<dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.13</version>
            </dependency>
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency>

2.实现代码

            // pdf文件保存路径
            String fileName = voSubLedger.getTargetPath() + "/" + beginDate + "-" + endDate + categoryName + "明细账" + ".pdf";

            // 创建文档实例,设置规格为A4纸,设置边距
            Document document = new Document(PageSize.A4, 10, 10, 36, 36);

            try {
                PdfWriter.getInstance(document, new FileOutputStream(fileName));
                document.open();
                // 添加中文字体
                BaseFont bfChines = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                // 设置字体样式
                Font FontChinese = new Font(bfChines, 16, Font.NORMAL);
                Font FontData = new Font(bfChines, 12, Font.UNDEFINED);
                Font FontTable = new Font(bfChines, 10, Font.NORMAL);
                Font FontTableHeader = new Font(bfChines, 10, Font.NORMAL, CMYKColor.RED);

                // 设置pdf标题
                Paragraph title = new Paragraph(categoryName + "明细账", FontChinese);
                title.setAlignment(Element.ALIGN_CENTER);
                document.add(title);

                // 设置表头-时间
                PdfPTable tableHeader = new PdfPTable(1);
                PdfPCell cell = new PdfPCell(new Paragraph("时间: " + beginDate + "-" + endDate, FontData));
                cell.setBorder(Rectangle.NO_BORDER);
                tableHeader.addCell(cell);

                // 设置表头-科目
                cell = new PdfPCell(new Paragraph("科目: " + categoryName + " " + voSubLedger.getSubjects(), FontData));
                cell.setBorder(Rectangle.NO_BORDER);
                tableHeader.addCell(cell);

                // 设置表上边的距离
                tableHeader.setSpacingBefore(30f);

                // 设置列的宽度 百分比
                float[] widths = {1f};
                tableHeader.setWidths(widths);
                tableHeader.setSpacingBefore(15f);
                document.add(tableHeader);

                // 主体表格创建,9列
                PdfPTable table = new PdfPTable(9);

                cell = new PdfPCell(new Paragraph("年", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("月", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("日", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("凭证号", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("摘要", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("借方", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("贷方", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("借/贷", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                cell = new PdfPCell(new Paragraph("余额", FontTableHeader));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 居中显示
                table.addCell(cell);

                // 固定行高度
                cell.setFixedHeight(20f);

                // 列表数据填充
                for (BizLedgerPdfVO bizLedger : bizLedgerVOList
                ) {

                    cell = new PdfPCell(new Paragraph(bizLedger.getYear(), FontTable)); //年
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getMonth(), FontTable));//月
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getDay(), FontTable));//日
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getVoucherNo(), FontTable));//凭证号
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getAbstracts(), FontTable));//摘要
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getDebitAmount(), FontTable));//借方金额
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getCreditAmount(), FontTable));//贷方金额
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getBalanceDirection(), FontTable));//方向
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);

                    cell = new PdfPCell(new Paragraph(bizLedger.getBalance(), FontTable));//余额
                    cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 水平居中
                    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中
                    table.addCell(cell);
                    // 每页设置表头
                    table.setHeaderRows(1);

                }

                // 列宽比例设置
                float[] width = {0.1f, 0.1f, 0.1f, 0.1f, 0.2f, 0.1f, 0.1f, 0.1f, 0.1f};
                table.setWidths(width);
                table.setSpacingBefore(15f);
                document.add(table);
                // 关闭文档
                document.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值