1:jar包:itextpdf ,语言包(支持中文):itext-asian
2:java代码实现:
public void outUtil(){
//新建pdf文本
Document document = new Document(PageSize.A4);
//字节数组流
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
//输出关系映射
PdfWriter pdfWriter = PdfWriter.getInstance(document,out);
//中文字符字体
BaseFont chinaFont = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
Font font = new Font(chinaFont,12);
Font titleFont = new Font(chinaFont,12,Font.BOLD);
//文本打开
document.open();
//新建段落1
Paragraph p1 = new Paragraph(vo.getM_name()+"-物业缴费收据"+orderPrintRo.getOrderId(),new Font(chinaFont,14,Font.BOLD));
//设置对齐格式
p1.setAlignment(Element.ALIGN_CENTER);
Paragraph bl = new Paragraph(" ",titleFont);
document.add(p1);
document.add(bl);
if(list!=null && list.size()>0){
OrderPrintVO orderPrintVO = list.get(0);
//新建表格设置为4列
PdfPTable table = new PdfPTable(4);
Paragraph p101 =new Paragraph("小区名称:",titleFont);
Paragraph p102 =new Paragraph(orderPrintVO.getCommunityName(),font);
Paragraph p103 =new Paragraph("户号:",titleFont);
Paragraph p104 =new Paragraph(orderPrintVO.getUnitNo()+"-"+orderPrintVO.getFloorNo()+"-"+orderPrintVO.getHouseNo(),font);
Paragraph p201 =new Paragraph("房屋建筑面积:",titleFont);
Paragraph p202 =new Paragraph(orderPrintVO.getAcreage()+"平米",font);
Paragraph p203 =new Paragraph("房屋状态:",titleFont);
Paragraph p204 =new Paragraph(orderPrintVO.getStatusName(),font);
Paragraph p301 =new Paragraph("单价:",titleFont);
Paragraph p302 =new Paragraph(orderPrintVO.getPrice()+"元/平米",font);
Paragraph p303 =new Paragraph("费率:",titleFont);
Paragraph p304 =new Paragraph(orderPrintVO.getRates()+"",font);
Paragraph p401 =new Paragraph("支付金额:",titleFont);
Paragraph p402 =new Paragraph(orderPrintVO.getRetailAmount()+"元",font);
Paragraph p403 =new Paragraph("赠送金额:",titleFont);
Paragraph p404 =new Paragraph((orderPrintVO.getGiftAmount()==null?"0":orderPrintVO.getGiftAmount())+"元",font);
Paragraph p501 =new Paragraph("支付方式:",titleFont);
Paragraph p502 =new Paragraph(payway,font);
Paragraph p503 =new Paragraph("支付时间:",titleFont);
Paragraph p504 =new Paragraph(DateUtil.getStringDate("yyyy-MM-dd HH:mm:ss",orderPrintVO.getPayTime()),font);
Paragraph p601 =new Paragraph("预存余额:",titleFont);
BigDecimal blance = orderMapper.selectDespositByOrderId(orderPrintRo.getOrderId());
Paragraph p602 =new Paragraph(blance.doubleValue()+"元",font);
Paragraph p603 =new Paragraph("业主姓名:",titleFont);
Paragraph p604 =new Paragraph(orderPrintVO.getOwnerName(),font);
Paragraph p701 =new Paragraph("联系电话:",titleFont);
Paragraph p702 =new Paragraph(vo.getMobile(),font);
Paragraph p703 =new Paragraph("日期",titleFont);
Paragraph p704 =new Paragraph(DateUtil.getStringDate("yyyy-MM-dd HH:mm:ss",new Date()),font);
//新增Cell并将段落加入,cell会更具表格的列自动从左到右,满了就换行
table.addCell(new PdfPCell(p101));
table.addCell(new PdfPCell(p102));
table.addCell(new PdfPCell(p103));
table.addCell(new PdfPCell(p104));
table.addCell(new PdfPCell(p201));
table.addCell(new PdfPCell(p202));
table.addCell(new PdfPCell(p203));
table.addCell(new PdfPCell(p204));
table.addCell(new PdfPCell(p301));
table.addCell(new PdfPCell(p302));
table.addCell(new PdfPCell(p303));
table.addCell(new PdfPCell(p304));
table.addCell(new PdfPCell(p401));
table.addCell(new PdfPCell(p402));
table.addCell(new PdfPCell(p403));
table.addCell(new PdfPCell(p404));
table.addCell(new PdfPCell(p501));
table.addCell(new PdfPCell(p502));
table.addCell(new PdfPCell(p503));
table.addCell(new PdfPCell(p504));
table.addCell(new PdfPCell(p601));
table.addCell(new PdfPCell(p602));
table.addCell(new PdfPCell(p603));
table.addCell(new PdfPCell(p604));
table.addCell(new PdfPCell(p701));
table.addCell(new PdfPCell(p702));
table.addCell(new PdfPCell(p703));
table.addCell(new PdfPCell(p704));
//设置表格的占空白纸张的百分比
table.setWidthPercentage(80);
table.setHorizontalAlignment(Element.ALIGN_CENTER);
document.add(table);
}
document.close();
response.addHeader("Content-disposition", "inline; filename=" +"物业收据"+ DateUtil.getStringDate("yyyyMMddHHmmss",new Date())+".pdf");
response.setContentType("application/pdf");
response.setContentLength(out.size());
ServletOutputStream outputStream = response.getOutputStream();
out.writeTo(outputStream);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
logger.error("异常"+e);
}
}
好了