最近项目中需要一个打印功能,需求很简单,只要打印出单据就可以了,画出一个表格,一些信息需要从数据库中提取
找到了免费的itext,可以实现我的简单的功能了
代码:(打印方法)
public String createPDF(HttpServletRequest request, HttpServletResponse response, String billCode,String comm) {
Rectangle rectangle = new Rectangle((float) 663.14 , (float) 370.7); Document document = new Document(rectangle,40,50,22,10);// 建立一个Document对象 //Document document=new Document(PageSize.A4,36,36,36,36); //document.setPageSize(PageSize.A4);// 设置页面大小 //String billCode = "20121026181"; List<ClientreCharge> reList = cRechargeManager.getreChargeByBillCode(billCode); SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分"); String time = df.format(new Date()); try { ByteArrayOutputStream ops = new ByteArrayOutputStream();//输出到客户段的流 //OutputStream ops=new FileOutputStream("e:/taony125-test.pdf");//保存进磁盘的流 //两个ops输出流用来切换,是保存进磁盘还是输出到客户端 PdfWriter.getInstance(document,ops);// 建立一个PdfWriter对象 document.open(); BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 设置中文字体 Font headFont1 = new Font(bfChinese, 14, Font.BOLD);// 设置字体大小 Font headFontN = new Font(bfChinese, 13, Font.BOLD);// 设置字体大小 Font headFont2 = new Font(bfChinese, 12, Font.BOLD);// 设置字体大小 Font headFont3 = new Font(bfChinese, 10, Font.NORMAL);// 设置字体大小 float[] widths = { 100, 110, 110, 110, 100, 110 };// 设置表格的列以及列宽 PdfPTable table = new PdfPTable(widths);// 建立一个pdf表格 table.setSpacingBefore(130f);// 设置表格上面空白宽度 table.setTotalWidth(535);// 设置表格的宽度 table.setLockedWidth(true);// 设置表格的宽度固定 // table.getDefaultCell().setBorder(0);//设置表格默认为无边框 PdfPCell cell = new PdfPCell(new Paragraph("石家庄瑞特维通讯网络有限公司充值业务单",headFont1));// 建立一个单元格 // cell.setBorder(0);//设置单元格无边框 cell.setBorder(0); cell.setFixedHeight(40);//单元格高度 cell.setColspan(6);// 设置合并单元格的列数 cell.setHorizontalAlignment(Element.ALIGN_CENTER);// 设置内容水平居中显示 cell.setVerticalAlignment(Element.ALIGN_MIDDLE); table.addCell(cell); //列标题 cell = new PdfPCell(new Paragraph("NO:", headFontN)); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); cell.setBorder(0); table.addCell(cell); cell = new PdfPCell(new Paragraph(billCode, headFontN)); cell.setBorder(0); cell.setColspan(3); table.addCell(cell); cell = new PdfPCell(new Paragraph(time, headFontN)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setColspan(2); cell.setBorder(0); table.addCell(cell); cell = new PdfPCell(new Paragraph("业务专员",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getClientSellerName(),headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("企业号",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getClireClMark(),headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("客服专员",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getClientsevName(),headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("公司名称",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setFixedHeight(30); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getClientName() ,headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setFixedHeight(30); cell.setColspan(3); table.addCell(cell); cell = new PdfPCell(new Paragraph("新开",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setFixedHeight(30); table.addCell(cell); cell = new PdfPCell(new Paragraph("口 是 | 口 否",headFont3)); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //Graphics grx = null ; //grx.s //grx.drawRect(0, 0, 2, 2); //添加一个矩形 //cell.addElement((Element) grx);table.addCell(cell);
cell = new PdfPCell(new Paragraph("联系人",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getContent(),headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("联系电话",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getMoney(),headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("充值单价",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getCounts(),headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); PdfPTable table2 = null; //cell.setRowspan(3); if (reList.size() < 2){ table2 = new PdfPTable(1); ClientreCharge creCharge = reList.get(0); cell = new PdfPCell(new Paragraph("充值属性:" +creCharge.getDictName()+ " 金额: " + creCharge.getClireMoney() + " ",headFont3)); cell.setBorder(0); //cell.setColspan(6); table2.addCell(cell); }else{ table2 = new PdfPTable(2); for (ClientreCharge creCharge : reList){ cell = new PdfPCell(new Paragraph("充值属性:" +creCharge.getDictName()+ " 金额: " + creCharge.getClireMoney() + " ",headFont3)); cell.setBorder(0); //cell.setColspan(6); table2.addCell(cell); }} cell = new PdfPCell(table2); cell.setFixedHeight(80); cell.setColspan(6); table.addCell(cell); cell = new PdfPCell(new Paragraph("回款方式",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setRowspan(2); table.addCell(cell); cell = new PdfPCell(new Paragraph("银行对公",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(" 口 中行 口 工行",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); cell.setColspan(2); table.addCell(cell); cell = new PdfPCell(new Paragraph("回款时间",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(" ",headFont3)); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("银行对私",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("口 工行 口 建行 口 交行 口 农行 口 光大银行 口 张家口银行 口 现金",headFont3)); cell.setFixedHeight(20); cell.setColspan(4); table.addCell(cell); cell = new PdfPCell(new Paragraph("充值确认",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(reList.get(0).getUsers(),headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph(" ",headFont3)); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("业务确认",headFont3)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setFixedHeight(20); table.addCell(cell); cell = new PdfPCell(new Paragraph("",headFont3)); cell.setFixedHeight(20); cell.setColspan(2); table.addCell(cell); cell = new PdfPCell(new Paragraph("备注:" + comm, headFont3)); // cell.setBorder(0); cell.setFixedHeight(50); cell.setColspan(6); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); table.addCell(cell);document.add(table);
document.close(); //输出到客户端 start,假如是保存进磁盘,则切换上面的流ops,且屏蔽此段代码即可 response.setContentType("application/pdf"); response.setContentLength(ops.size()); ServletOutputStream out = response.getOutputStream(); ops.writeTo(out); out.flush(); //end } catch (DocumentException de) { System.err.println(de.getMessage()); return null; } catch (IOException ioe) { System.err.println(ioe.getMessage()); return null; } return null; }效果: