java 导出pdf文件

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;
	}
	

}



猜你喜欢

转载自blog.csdn.net/huweijun_2012/article/details/53240602