采用 iText-2.1.7.js2.jar 包
网上很多案例,可以多多借鉴,很多方法没有用过导致不知道,欢迎大佬补充。 话不多说
上代码:
创建document对象 及设置自己需要的字体,字体有很多种 需要的话自行百度- -。 创建对象方法多种多样,但这一步是必须的
//1:创建com.lowagie.text.Document的对象 ,设置纸张大小为A4
Rectangle pageSize = new Rectangle(PageSize.A4.getHeight(), PageSize.A4.getWidth());
Document document = new Document(pageSize);
//2: 创建PdfWriter的对象去侦听上面创建的文档,并把这个文档写入到你定义的输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
//3: 打开文档
document.open();
//4: 添加内容到文档中
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//字体设置
Font titleFont = new Font(bfChinese, 16);
Font tontChinese = new Font(bfChinese, 12);
关键点:创建表格及设置样式(样式需要自行多调整,多尝试,多百度)
//设置标题
document.add(new Paragraph("不动产证明附页",titleFont));
document.add(new Paragraph("\n")); //添加空行
Paragraph t = new Paragraph("不动产证明附页列表",titleFont);
//设置居中
t.setAlignment(1);
t.setAlignment(Element.ALIGN_CENTER);
document.add(t);
document.add(new Paragraph("\n"));
document.add(new Paragraph("权利人(申请人):"+sz.getQlr(),new Font(bfChinese, 15)));
document.add(new Paragraph("\n"));
//设置每列长度,共三列
PdfPTable table = new PdfPTable(3);
table.setTotalWidth(new float[]{ 250, 120, 400}); //设置列宽
table.setLockedWidth(true); //锁定列宽
table.setTotalWidth(770);//固定宽度
table.setHorizontalAlignment(Element.ALIGN_CENTER);
//第一行 每列名称
String[] name = {"不动产单元号","证号","坐落"};
for(String a: name) {
**//一定要用构造方法写 才可以居中,网上都是用set方法设置居中的,但我开发过程中只能通过构造方法才可以,知道的大神请解惑**
PdfPCell column1 = new PdfPCell(new Phrase(a, tontChinese));
column1.setUseAscender(true); //设置可以居中
column1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); //设置水平居中
column1.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); //设置垂直居中
table.addCell(column1);
}
//每列的数据,此处为 单元格内数据,请替换成自己的数据
for(int i=0;i<sz.getHouseGroup().size();i++) {
PdfPCell cell = new PdfPCell(new Phrase(sz.getHouseGroup().get(i).getBdcdyh() , tontChinese));
cell.setMinimumHeight(30);
cell.setUseAscender(true); //设置可以居中
cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); //设置水平居中
cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); //设置垂直居中
table.addCell(cell);
PdfPCell cell2 = new PdfPCell(new Phrase(sz.getHouseGroup().get(i).getQzh() , tontChinese));
cell2.setMinimumHeight(30);
cell2.setUseAscender(true); //设置可以居中
cell2.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); //设置水平居中
cell2.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); //设置垂直居中
table.addCell(cell2);
PdfPCell cell3 = new PdfPCell(new Phrase(sz.getHouseGroup().get(i).getZl(), tontChinese));
cell3.setMinimumHeight(30);
cell3.setUseAscender(true); //设置可以居中
cell3.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); //设置水平居中
cell3.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); //设置垂直居中
table.addCell(cell3);
}
//表的结尾 不带边框
PdfPCell ljts = new PdfPCell();
ljts.setColspan(2);
ljts.addElement(new Paragraph("累计套数:"+sz.getLjts()+"套", new Font(bfChinese, 12, Font.NORMAL)));
ljts.setMinimumHeight(20); //设置单元格高度
ljts.setBorderWidth(0f); //去除边框
table.addCell(ljts);
PdfPCell dyrq = new PdfPCell();
dyrq.setColspan(1);
dyrq.addElement(new Paragraph("打印日期:"+sz.getDyrq(), new Font(bfChinese, 12, Font.NORMAL)));
dyrq.setMinimumHeight(20); //设置单元格高度
dyrq.setBorderWidth(0f); //去除边框
table.addCell(dyrq);
document.add(table);
//5: 关闭文档
document.close();
//设置为下载文件弹框,和文件名编码
ServletOutputStream outputStream = response.getOutputStream();
response.reset(); //清除缓存,否则报错
response.setHeader("Content-disposition","attachment; filename=\""+new String("不动产证明附页".getBytes(), "ISO8859-1") +".pdf\"");
//设置文件大小
response.setContentLength(baos.size());
//6: 将PDF文件输出到流中去.
baos.writeTo(outputStream);
outputStream.flush();
outputStream.close();
效果图