項目中須要打印標籤信息,格式固定,每頁的行數,列數都固定,開始打算使用 html 設計頁面而後進行打印,但 html 頁面比較麻煩,並且對瀏覽器兼容方面要求較高,因此最後決定使用 itext 生成 pdf 的方式。而後將 pdf 轉成流輸出到瀏覽器中。html
// 建立一個有4列的表格 PdfPTable table = new PdfPTable(3); table.setTotalWidth(new float[]{ 200, 200, 200}); //設置列寬 table.setLockedWidth(true); //鎖定列寬 for(int i=0;i<3;i++){ for(int j=0;j<8;j++){ PdfPCell cell; cell = new PdfPCell(p1); cell.setBorderWidthLeft(3); cell.setBorderWidthTop(3); cell.setBorderWidth(0); cell.setBorder(0); cell.setPaddingLeft(35); cell.setPaddingRight(35); cell.setMinimumHeight(95); //設置單元格高度 cell.setUseAscender(true); //設置能夠居中 cell.setHorizontalAlignment(PdfPCell.LEFT); //設置水平居中 cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); //設置垂直居中 table.addCell(cell); } } doc.add(table);//將table加入到pdf中 doc.close(); return outPath; } }
3.將 pdf 轉成流輸出到瀏覽器,後臺調用上面的方法api
public void exportPdf() { try { String pdfPath = PDFUtil.createPDF();//獲取pdf路徑 HttpServletResponse response = this.getResponse(); response.setContentType("application/pdf"); ServletOutputStream sos = response.getOutputStream(); File pdf = null; //response.setHeader("Content-disposition", "attachment;filename=laallal.pdf");//直接下載到本地 FileInputStream fis = null; byte[] buffer = new byte[1024*1024]; pdf = new File(pdfPath); response.setContentLength((int) pdf.length()); fis = new FileInputStream(pdf); int readBytes = -1; while((readBytes = fis.read(buffer, 0, 1024*1024)) != -1){ sos.write(buffer, 0, 1024*1024); } sos.close(); fis.close(); } catch (Exception e) { e.printStackTrace(); } renderNull(); }
這個過程當中主要須要注意 jar 版本,而後具體生成的內容就能夠本身查看 itext 的 api 進行個性化設置。瀏覽器