Java_iText_PDF—生成PDF工具

Maven:

1<!--iText(用于生成PDF--> 2 <dependency> 3 <groupId>com.itextpdf</groupId> 4 <artifactId>itextpdf</artifactId> 5 <version>5.5.10</version> 6 </dependency> 7 <dependency> 8 <groupId>com.itextpdf</groupId> 9 <artifactId>itext-asian</artifactId> 10 <version>5.2.0</version> 11 </dependency> 12 13包引用: 14 15import com.itextpdf.text.*; 16import com.itextpdf.text.pdf.*;

1. 详情见代码:

1/** 2 * PDF工具 3 */ 4public class PdfUtils { 5 6 /** 7 * 生成 8 * @param iouData 借据数据 9 * @param planList 还款计划List 10 * @param accountsList 收本金账户 11 * @param interstAccountsList 收息账户 12 * @param orderCode 13 * @return 14 */ 15 public static String turnToPdf(LoanIouData iouData,List<LoanRepaymentPlan> planList, List<TransferAccount> accountsList, List<TransferAccount> interstAccountsList, String orderCode){ 16 17 String basePath = PropertiesUtil.getValue("pdf.path","/application.properties"); 18 File file = new File(basePath); 19 if(!file.exists()){ 20 file.mkdirs(); 21 } 22 23 String path = ""; 24 25 try { 26 //创建文件 27 Document document = new Document(); 28 //建立一个书写器 29 path = basePath+orderCode+"_还款计划表.pdf"; 30 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(path)); 31 32 //打开文件 33 document.open(); 34 35 //中文字体,解决中文不能显示问题 36 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); 37 Font font = new Font(bfChinese);//正常字体 38 Font fontBold = new Font(bfChinese, 12, Font.BOLD);//正常加粗字体 39 Font fontBig = new Font(bfChinese, 20);//大字体 40 Font fontBigBold = new Font(bfChinese, 20, Font.BOLD);//加粗大字体 41 42 //添加主题 43 Paragraph theme = new Paragraph("还款计划表", fontBigBold); 44 theme.setAlignment(Element.ALIGN_CENTER); 45 document.add(theme); 46 47 //借款信息 48 Paragraph peopleInfo = new Paragraph("借款人:"+iouData.getBorrower()+" "+"借款金额:"+iouData.getLoanAmount()+"万元", font); 49 peopleInfo.setAlignment(Element.ALIGN_CENTER); 50 document.add(peopleInfo); 51 52 //加入空行 53 //Paragraph blankRow = new Paragraph(18f, " "); 54 //document.add(blankRow); 55 56 //TODO Table1 还款计划 : 3列的表.------------------------------------- 57 PdfPTable table1 = new PdfPTable(3); 58 table1.setWidthPercentage(90); // 宽度100%填充 59 table1.setSpacingBefore(20f); // 前间距 60 table1.setSpacingAfter(20f); // 后间距 61 62 List<PdfPRow> listRow = table1.getRows(); 63 //设置列宽 64 float[] columnWidths = {1f, 2f, 3f}; 65 table1.setWidths(columnWidths); 66 67 //行1 68 PdfPCell cells0[] = new PdfPCell[3]; 69 PdfPRow row0 = new PdfPRow(cells0); 70 //单元格 71 cells0[0] = new PdfPCell(new Paragraph("期数", fontBold));//单元格内容 72 cells0[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 73 cells0[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 74 cells0[0].setFixedHeight(25f); 75 cells0[0].setBackgroundColor(BaseColor.LIGHT_GRAY); 76 cells0[1] = new PdfPCell(new Paragraph("日期", fontBold)); 77 cells0[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 78 cells0[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 79 cells0[1].setBackgroundColor(BaseColor.LIGHT_GRAY); 80 cells0[2] = new PdfPCell(new Paragraph("金额(元)", fontBold)); 81 cells0[2].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 82 cells0[2].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 83 cells0[2].setBackgroundColor(BaseColor.LIGHT_GRAY); 84 85 listRow.add(row0); 86 87 //插入还款内容 88 for (LoanRepaymentPlan plan : planList) { 89 PdfPCell cells[] = new PdfPCell[3]; 90 PdfPRow row = new PdfPRow(cells); 91 cells[0] = new PdfPCell(new Paragraph(String.valueOf(plan.getNum()))); 92 cells[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 93 cells[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 94 cells[0].setFixedHeight(25f); 95 cells[1] = new PdfPCell(new Paragraph(String.valueOf(DateFormatUtils.format(plan.getRepaymentTime(), "yyyy/MM/dd")))); 96 cells[1].setFixedHeight(25f); 97 cells[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 98 cells[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 99 cells[2] = new PdfPCell(new Paragraph(String.valueOf(plan.getReturnAmount()))); 100 cells[2].setFixedHeight(25f); 101 cells[2].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 102 cells[2].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 103 //把第单元格添加到集合(行) 104 listRow.add(row); 105 } 106 107 108 //TODO Table2 账户列表 : 2列的表.------------------------------------------------------------------------ 109 110 PdfPTable table2 = new PdfPTable(2); 111 table2.setWidthPercentage(90); // 宽度100%填充 112 table2.setSpacingBefore(20f); // 前间距 113 table2.setSpacingAfter(20f); // 后间距 114 List<PdfPRow> listRow2 = table2.getRows(); 115 //设置列宽 116 float[] columnWidths2 = {1f, 2f}; 117 table2.setWidths(columnWidths2); 118 //TODO --第一部分 119 PdfPCell cells2[] = new PdfPCell[2]; 120 PdfPRow row2 = new PdfPRow(cells2); 121 cells2[0] = new PdfPCell(new Paragraph("还息账号信息", fontBold));//单元格内容 122 cells2[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 123 cells2[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 124 cells2[0].setFixedHeight(25f); 125 cells2[0].setBackgroundColor(BaseColor.LIGHT_GRAY); 126 cells2[0].setColspan(2);//合并单元格 127 listRow2.add(row2); 128 129 for(TransferAccount interstAccount : interstAccountsList){ 130 PdfPCell cells3[] = new PdfPCell[2]; 131 PdfPRow row3 = new PdfPRow(cells3); 132 cells3[0] = new PdfPCell(new Paragraph("还息账号", font));//单元格内容 133 cells3[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 134 cells3[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 135 cells3[0].setFixedHeight(25f); 136 137 cells3[1] = new PdfPCell(new Paragraph(interstAccount.getCertPan(), font));//单元格内容 138 cells3[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 139 cells3[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 140 cells3[1].setFixedHeight(25f); 141 142 listRow2.add(row3); 143 144 PdfPCell cells4[] = new PdfPCell[2]; 145 PdfPRow row4 = new PdfPRow(cells4); 146 cells4[0] = new PdfPCell(new Paragraph("还息户名", font));//单元格内容 147 cells4[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 148 cells4[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 149 cells4[0].setFixedHeight(25f); 150 151 cells4[1] = new PdfPCell(new Paragraph(interstAccount.getName(), font));//单元格内容 152 cells4[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 153 cells4[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 154 cells4[1].setFixedHeight(25f); 155 listRow2.add(row4); 156 157 PdfPCell cells5[] = new PdfPCell[2]; 158 PdfPRow row5 = new PdfPRow(cells5); 159 cells5[0] = new PdfPCell(new Paragraph("还息开户行", font));//单元格内容 160 cells5[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 161 cells5[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 162 cells5[0].setFixedHeight(25f); 163 164 cells5[1] = new PdfPCell(new Paragraph(interstAccount.getOpenBankName(), font));//单元格内容 165 cells5[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 166 cells5[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 167 cells5[1].setFixedHeight(25f); 168 169 listRow2.add(row5); 170 } 171 172 173 174 175 176 //TODO --第2部分 177 PdfPCell cells6[] = new PdfPCell[2]; 178 PdfPRow row6 = new PdfPRow(cells6); 179 cells6[0] = new PdfPCell(new Paragraph("还本金账号信息", fontBold));//单元格内容 180 cells6[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 181 cells6[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 182 cells6[0].setFixedHeight(25f); 183 cells6[0].setBackgroundColor(BaseColor.LIGHT_GRAY); 184 cells6[0].setColspan(2);//合并单元格 185 listRow2.add(row6); 186 187 for(TransferAccount account : accountsList){ 188 189 PdfPCell cells7[] = new PdfPCell[2]; 190 PdfPRow row7 = new PdfPRow(cells7); 191 cells7[0] = new PdfPCell(new Paragraph("还本金账号", font));//单元格内容 192 cells7[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 193 cells7[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 194 cells7[0].setFixedHeight(25f); 195 196 cells7[1] = new PdfPCell(new Paragraph(account.getCertPan(), font));//单元格内容 197 cells7[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 198 cells7[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 199 cells7[1].setFixedHeight(25f); 200 201 listRow2.add(row7); 202 203 PdfPCell cells8[] = new PdfPCell[2]; 204 PdfPRow row8 = new PdfPRow(cells8); 205 cells8[0] = new PdfPCell(new Paragraph("还本金户名", font));//单元格内容 206 cells8[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 207 cells8[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 208 cells8[0].setFixedHeight(25f); 209 210 cells8[1] = new PdfPCell(new Paragraph(account.getName(), font));//单元格内容 211 cells8[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 212 cells8[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 213 cells8[1].setFixedHeight(25f); 214 215 listRow2.add(row8); 216 217 PdfPCell cells9[] = new PdfPCell[2]; 218 PdfPRow row9 = new PdfPRow(cells9); 219 cells9[0] = new PdfPCell(new Paragraph("还本金开户行", font));//单元格内容 220 cells9[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 221 cells9[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 222 cells9[0].setFixedHeight(25f); 223 224 cells9[1] = new PdfPCell(new Paragraph(account.getOpenBankName(), font));//单元格内容 225 cells9[1].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中 226 cells9[1].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中 227 cells9[1].setFixedHeight(25f); 228 229 listRow2.add(row9); 230 231 } 232 233 234 //把表格添加到文件中 235 document.add(table1); 236 document.add(table2); 237 238 //关闭文档 239 document.close(); 240 //关闭书写器 241 writer.close(); 242 }catch (Exception ex){ 243 ex.printStackTrace(); 244 } 245 246 return path; 247 } 248}

结果:

2. 面向对象方式,适用特定形式(收据等)

  ... ...

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap

Java_iText_PDF—生成PDF工具 - HelloWorld