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();
}