iText生成PDF表格

直接上代碼

try{
			String id = this.getRequest().getParameter("id";
			String personId = this.getRequest().getParameter("personId"));
			if(StringUtil.isNotEmpty(id)&&StringUtil.isNotEmpty(personId)){
			PersonGradeInfo gradeInfo = persInfoManager.getGradeInfoById(id,personId);
			BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			com.lowagie.text.Document pdfDoc = new com.lowagie.text.Document(com.lowagie.text.PageSize.A4, 20, 20, 20, 20);
			Font title = new Font(bfChinese, 20, Font.BOLD);
			Font cellTitle = new Font(bfChinese, 11, Font.BOLD);
			Font cellContent = new Font(bfChinese, 11, Font.NORMAL);
			
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			PdfWriter.getInstance(pdfDoc, baos);
			pdfDoc.open();
 
			Paragraph docTitle = new Paragraph("基 本 信 息 表\n", title);
			docTitle.setAlignment(Element.ALIGN_CENTER);
			docTitle.setSpacingBefore(20);
			pdfDoc.add(docTitle);
			
			int size = 35;
			int contentSize = 30;
			
			int widths[] = { 12,12, 25, 21, 25, 25, 25, 15, 15 };
			PdfPTable baseTable = new PdfPTable(9);
			baseTable.setWidthPercentage(100);
			baseTable.setSpacingBefore(10);
			baseTable.setWidths(widths);
	
			
			PdfPCell baseTableCell = new PdfPCell(new Paragraph("姓名", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(2);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getPersonName() + "", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("性別", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(sexMap.get(gradeInfo.getSex()) + "", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("出生年月", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			Date birthday = gradeInfo.getBirthday();
			if (null != birthday) {
				int year = DateUtil.getYear(birthday);
				int month = DateUtil.getMonth(birthday);
				baseTableCell = new PdfPCell(new Paragraph(year + "年" + month + "月", cellContent));
				baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
				baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
				baseTableCell.setColspan(1);
				baseTableCell.setFixedHeight(size);
				baseTable.addCell(baseTableCell);
			} else {
				baseTableCell = new PdfPCell(new Paragraph("", cellContent));
				baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
				baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
				baseTableCell.setColspan(1);
				baseTableCell.setFixedHeight(size);
				baseTable.addCell(baseTableCell);
			}
	        
			String url ="路徑";
	        java.net.URL imgurl = new java.net.URL(url);
	        java.awt.Image awtImage = ImageIO.read(imgurl);
 
	        if(null!=awtImage){
				Image img = Image.getInstance(awtImage,null);
				img.scaleAbsolute((float) 210, (float) 300);
				baseTableCell = new PdfPCell(img,true);
				baseTableCell.setPadding(1);
				baseTableCell.setColspan(2);
				baseTableCell.setRowspan(3);
				baseTableCell.setFixedHeight(size*3);
				baseTable.addCell(baseTableCell);
			}else{
				baseTableCell = new PdfPCell(new Paragraph("相片", cellContent));
				baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
				baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
				baseTableCell.setColspan(2);
				baseTableCell.setRowspan(3);
				baseTableCell.setFixedHeight(size*3);
				baseTable.addCell(baseTableCell);
			}
			
			baseTableCell = new PdfPCell(new Paragraph("籍貫", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(2);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getNativePlace() + "", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
		
			baseTableCell = new PdfPCell(new Paragraph("民族", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(nationMap.get(gradeInfo.getEthnic()) + "", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("政治面貌", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getPoliticalStatus() + "", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("標準工資", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(2);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph( "", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("身體狀況", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getHealthCondition(), cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph("外語程度", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getForeignDegree(), cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(size);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("學習\n經歷", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(contentSize*4);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getStudyExperience(), cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
			baseTableCell.setColspan(8);
			baseTableCell.setFixedHeight(contentSize*4);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("特長", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(contentSize*3);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getSpecialty(), cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
			baseTableCell.setColspan(8);
			baseTableCell.setFixedHeight(contentSize*3);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("獎罰", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setFixedHeight(contentSize*3);
			baseTable.addCell(baseTableCell);
 
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getProbationReward(), cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
			baseTableCell.setColspan(8);
			baseTableCell.setFixedHeight(contentSize*3);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("見習\n工作", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(1);
			baseTableCell.setRowspan(3);
			baseTableCell.setFixedHeight(contentSize*10);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("時間", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(2);
			baseTableCell.setFixedHeight(contentSize);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("部門崗位", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(2);
			baseTableCell.setFixedHeight(contentSize);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph("主要工作內容", cellTitle));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(4);
			baseTableCell.setFixedHeight(contentSize);
			baseTable.addCell(baseTableCell);
			
			Date probationTime = gradeInfo.getProbationTime();
			if (null != probationTime) {
				int year = DateUtil.getYear(probationTime);
				int month = DateUtil.getMonth(probationTime);
				baseTableCell = new PdfPCell(new Paragraph(year + "年" + month + "月", cellContent));
				baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
				baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
				baseTableCell.setColspan(2);
				baseTableCell.setFixedHeight(size);
				baseTable.addCell(baseTableCell);
			} else {
				baseTableCell = new PdfPCell(new Paragraph("", cellContent));
				baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
				baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
				baseTableCell.setColspan(2);
				baseTableCell.setFixedHeight(size);
				baseTable.addCell(baseTableCell);
			}
			
			
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getProbationDept()+"", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(2);
			baseTableCell.setFixedHeight(contentSize);
			baseTable.addCell(baseTableCell);
			
			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getProbationContent()+"", cellContent));
			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_CENTER);
			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_MIDDLE);
			baseTableCell.setColspan(4);
			baseTableCell.setFixedHeight(contentSize);
			baseTable.addCell(baseTableCell);
			
//			baseTableCell = new PdfPCell(new Paragraph(gradeInfo.getProbationSumm()+"", cellContent));
//			baseTableCell.setHorizontalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
//			baseTableCell.setVerticalAlignment(com.lowagie.text.Element.ALIGN_LEFT);
//			baseTableCell.setColspan(8);
//			baseTableCell.setFixedHeight(contentSize*8);
//			baseTable.addCell(baseTableCell);
			
			
			baseTableCell = new PdfPCell();
			Paragraph para = new Paragraph(gradeInfo.getProbationSumm()+"\n",cellContent);
			para.setAlignment(Element.ALIGN_LEFT);
			baseTableCell.addElement(para);
			
			para = new Paragraph("本人簽名:                                                  年       月       日",cellContent);
			para.setAlignment(Element.ALIGN_RIGHT);
			baseTableCell.addElement(para);
			baseTableCell.setPaddingTop(5);
			baseTableCell.setPaddingBottom(5);
			
			baseTableCell.setFixedHeight(contentSize*8);
			baseTableCell.setColspan(8);
			baseTable.addCell(baseTableCell);
			
			pdfDoc.add(baseTable);
			pdfDoc.close();
 
			getResponse().setContentType("application/pdf");
			getResponse().setHeader("Content-Disposition", "attachment; filename=" + StringUtil.transFileName(gradeInfo.getPersonName() + "-基本信息表", getRequest()) + ".pdf");
			getResponse().setContentLength(baos.size());
			baos.writeTo(getResponse().getOutputStream());
			}
			}catch(IOException e){
				Log.doLog("EXCEPTION", e);
			}

在每一個字段和他對應的內容都會有setColspan()方法來設置它所佔的列;
而行數默認是1行,所以在“相片”字段是需要3行的的時候,就必須用setRowspan(3)來設置;

setFixedHeight()是用來設置每一行的高度,可以自己設置;
注意:在顯示照片的地方,設置setPadding(),是照片對內邊框的設置;
           setBorder()是設置邊框

在我寫的這個打印pdf的代碼中,遇到一個問題,當setPadding()和setBorder()一起使用的時候,相片的右邊將會沒有邊框

原因有2個:1)是由於圖片太大覆蓋了邊框;

             2)由於設置setBorder(1)與後面的baseTable.addCell(baseTableCell);重複,所以邊框會消失

所以一般情況,setBorder()的值一般爲0,或不要設置這個值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章