1, the use package is as follows:
itext-2.1.7.jar
itextasian-1.5.2.jar
Download address: Click to download the jar package
2, the code is as follows:
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); //Setting the footer needs to be before open document.setFooter(createFooter(fontChinese10)); document.setHeader(createHeader(fontChinese10)); document.open(); document.add(new Paragraph("Junle.com",fontChinese14)); document.add(createImg()); document.newPage(); document.add(new Paragraph("Junle.com",fontChinese14)); document.add(emptyLine10); document.add(createTab(fontChinese12)); document.newPage(); document.add(new Paragraph("Junle.com",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);//How many columns tab.setTotalWidth(515); //fixed width tab.setLockedWidth(true); //When using a fixed width, the width must be locked tab.setWidths(new int[]{103,103,103,103,103}); //The width of each column is only valid for fixed widths; if the table uses a percentage to set the total width, then the percentage is used here. //tab.setWidthPercentage(percen); The table width is set to 100% //tab.getDefaultCell().setBorder(0); Uniformly set the border to 0, but if a cell is added separately, it will be invalid. PdfPCell cell_id = new PdfPCell(new Paragraph("序号", fontChinese12)); cell_id.setFixedHeight(20);//Cell height //cell_id.setPaddingLeft(0); //cell_id.setColspan(2); //Merge columns //cell_id.setRowspan(2); //Merge rows //cell_id.setBorder(0); //Border //cell_id.addElement(tab); //A table can be added to the nested cell of the table 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("Eligible", 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; } }