1,使用包如下:
itext-2.1.7.jar
itextasian-1.5.2.jar
下载地址: 点击下载jar包
2,代码如下:
package com.junlenet.action; import java.awt.Color; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.lowagie.text.Document; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.HeaderFooter; import com.lowagie.text.Image; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; /** * Servlet implementation class PdfAction */ @WebServlet(description = "PdfAction", urlPatterns = { "/PdfAction" }) public class PdfAction extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public PdfAction() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font fontChinese10 = new Font(bfChinese, 10, Font.NORMAL); Font fontChinese12 = new Font(bfChinese, 12, Font.NORMAL); Font fontChinese14 = new Font(bfChinese, 14, Font.NORMAL); Paragraph emptyLine5 = new Paragraph(5," "); Paragraph emptyLine10 = new Paragraph(10," "); Document document = new Document(PageSize.A4,40,40,30,30); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filePathString)); PdfWriter writer = PdfWriter.getInstance(document, baos); //设置页脚需要在open之前 document.setFooter(createFooter(fontChinese10)); document.setHeader(createHeader(fontChinese10)); document.open(); document.add(new Paragraph("君乐网",fontChinese14)); document.add(createImg()); document.newPage(); document.add(new Paragraph("君乐网",fontChinese14)); document.add(emptyLine10); document.add(createTab(fontChinese12)); document.newPage(); document.add(new Paragraph("君乐网",fontChinese14)); document.newPage(); document.close(); response.setHeader("Content-disposition","attachment; filename=\""+new String("PDF文件".getBytes(), "ISO8859-1") +".pdf\""); response.setContentLength(baos.size()); ServletOutputStream outputStream = response.getOutputStream(); baos.writeTo(outputStream); outputStream.flush(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } private PdfPTable createTab(Font fontChinese12){ try { PdfPTable tab = new PdfPTable(5);//多少列 tab.setTotalWidth(515); //固定宽度 tab.setLockedWidth(true); //使用固定宽度时,必须锁定宽度 tab.setWidths(new int[]{103,103,103,103,103}); //每列的宽度, 只针对固定宽度有效;如果表格使用百分比设置总宽度的话,那这里也就是使用百分比. //tab.setWidthPercentage(percen); 表格宽度设置为100% //tab.getDefaultCell().setBorder(0); 统一设置边框为0 ,但是如果单独添加了单元格,则无效. PdfPCell cell_id = new PdfPCell(new Paragraph("序号", fontChinese12)); cell_id.setFixedHeight(20);//单元格高度 //cell_id.setPaddingLeft(0); //cell_id.setColspan(2); //合并列 //cell_id.setRowspan(2); //合并行 //cell_id.setBorder(0); //边框 //cell_id.addElement(tab); //表格嵌套 单元格里面可以再添加一个表格 tab.addCell(cell_id); PdfPCell cell_name = new PdfPCell(new Paragraph("名称", fontChinese12)); tab.addCell(cell_name); PdfPCell cell_age = new PdfPCell(new Paragraph("年龄", fontChinese12)); tab.addCell(cell_age); PdfPCell cell_email = new PdfPCell(new Paragraph("邮箱", fontChinese12)); tab.addCell(cell_email); PdfPCell cell_isok = new PdfPCell(new Paragraph("是否合格", fontChinese12)); tab.addCell(cell_isok); List<Map<String, String>> data = tabData(); PdfPCell cell_temp = null; for (Map<String, String> map : data) { cell_temp = new PdfPCell(new Paragraph(map.get("id"), fontChinese12)); tab.addCell(cell_temp); cell_temp = new PdfPCell(new Paragraph(map.get("name"), fontChinese12)); tab.addCell(cell_temp); cell_temp = new PdfPCell(new Paragraph(map.get("age"), fontChinese12)); tab.addCell(cell_temp); cell_temp = new PdfPCell(new Paragraph(map.get("email"), fontChinese12)); tab.addCell(cell_temp); cell_temp = new PdfPCell(new Paragraph(map.get("isok"), fontChinese12)); tab.addCell(cell_temp); } return tab; } catch (Exception e) { e.printStackTrace(); return null; } } private List<Map<String, String>> tabData(){ List<Map<String, String>> data = new ArrayList<Map<String,String>>(); Map<String, String> item = null; for (int i = 0; i < 10; i++) { item = new HashMap<String, String>(); item.put("id", "1000"+i); item.put("name", "HWJ_"+i); item.put("age", ""+(20+i)); item.put("email", "2368890"+i+"79qq.com"); item.put("isok", i%2==0?"合格":"不合格"); data.add(item); } return data; } private Image createImg(){ try { String url = "http://junlenet.com/uploads/allimg/160424/1-160424122217.jpg"; Image image = Image.getInstance(url); image.scaleToFit(200,120); return image; } catch (Exception e) { return null; } } private HeaderFooter createFooter(Font fontChinese10){ String footStr1 = "\t\t君乐网\t www.j unl enet.com\t\t\t\t\t\t\t\t\t\t\t\t\t\t "; HeaderFooter footer=new HeaderFooter(new Phrase(footStr1,fontChinese10),new Phrase("/ 3\t\t",fontChinese10)); footer.setAlignment(Element.ALIGN_RIGHT); footer.setBorderColorTop(new Color(0,0,0)); footer.setBorderWidthTop(1); footer.setBorderWidthBottom(0); footer.setBorderWidthLeft(0); footer.setBorderWidthRight(0); return footer; } private HeaderFooter createHeader(Font fontChinese10){ String footStr1 = "www.j unl enet.com\t\tqq: 962884205 "; // HeaderFooter footer=new HeaderFooter(new Phrase(footStr1,fontChinese10),new Phrase("/ 3\t\t",fontChinese10)); HeaderFooter footer=new HeaderFooter(new Phrase(footStr1,fontChinese10), false) ; footer.setAlignment(Element.ALIGN_LEFT); footer.setBorderWidthTop(0); footer.setBorderColorBottom(new Color(0,0,0)); footer.setBorderWidthBottom(1); footer.setBorderWidthLeft(0); footer.setBorderWidthRight(0); return footer; } }