Java利用模板生成pdf並導出

 

1.準備工做

(1)Adobe Acrobat pro軟件:用來製做導出模板
(2)itext的jar包java

2.開始製做pdf模板

(1)先用word作出模板界面
在這裏插入圖片描述
(2)文件另存爲pdf格式文件
在這裏插入圖片描述
(3)經過Adobe Acrobat pro軟件打開剛剛用word轉換成的pdf文件
在這裏插入圖片描述
(4)點擊右邊的"準備表單"按鈕,選擇"測試.pdf"選擇開始(選擇工具欄裏面添加文本域,能夠選擇在任意位置添加你想要的文本域。在文本域屬性框能夠設置文本的屬性,例如文本的名稱、字體大小、位置等)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
(5)作完上面的工做後,直接"另存爲"將pdf存儲就能夠
在這裏插入圖片描述
到此模板就製做完成啦!接下來就開始寫代碼啦json

3.開始導出pdf

(1)pdf工具類PdfUtil.javaapp

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletOutputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
public class PdfUtil {
	/**
	 * 
	 * @param o 寫入的數據
	 * @param out 自定義保存pdf的文件流
	 * @param templatePath pdf模板路徑
	 */
	// 利用模板生成pdf
    public  void fillTemplate(Map<String,Object> o,ServletOutputStream out,String templatePath) {
        PdfReader reader;
        ByteArrayOutputStream bos;	
        PdfStamper stamper;
        try {
            reader = new PdfReader(templatePath);// 讀取pdf模板
            bos = new ByteArrayOutputStream();
            stamper = new PdfStamper(reader, bos);
            AcroFields form = stamper.getAcroFields();

            java.util.Iterator<String> it = form.getFields().keySet().iterator();
            while (it.hasNext()) {
                String name = it.next().toString();
                System.out.println(name);
                String value = o.get(name)!=null?o.get(name).toString():null;
                form.setField(name,value);
            }
            stamper.setFormFlattening(true);// 若是爲false那麼生成的PDF文件還能編輯,必定要設爲true
            stamper.close();

            Document doc = new Document();
            PdfCopy copy = new PdfCopy(doc, out);
            doc.open();
            PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
            copy.addPage(importPage);
            doc.close();

        } catch (IOException e) {
            System.out.println(e);
        } catch (DocumentException e) {
            System.out.println(e);
        }
}
  
    }

(2)action文件裏的方法調用PdfUtil生成pdf並導出工具

public String  downloadFile(){
	String json = ServletActionContext.getRequest().getParameter("json");
        try {
			json = java.net.URLDecoder.decode(json,"UTF-8");  //解碼
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        JSONObject jsonObject = JSONObject.fromObject(json);
        Map<String, Object> mapJson = JSONObject.fromObject(jsonObject);
    	HttpServletResponse response = ServletActionContext.getResponse();
    	// 設置response參數,能夠打開下載頁面
        response.reset();
        response.setCharacterEncoding("UTF-8");
        // 定義輸出類型
        response.setContentType("application/PDF;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment; filename=" + "assessment.pdf");
        try {
			ServletOutputStream out = response.getOutputStream();
			PdfUtil pdf = new PdfUtil();
		    pdf.fillTemplate(mapJson ,out,"模板pdf存放的路徑");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
    }

(3)js發起調用(若是用Ajax發起的調用就沒法打開下載頁面)測試

var json = {};
json.studyNum = "123456789";
json.name = "TOP__ONE";
json.sex = "男";
json.birthday = "1991-01-01";
json.id = "130222111133338888";
json.addr = "河北省保定市";
var strJson = encodeURIComponent(encodeURIComponent(JSON.stringify(json)));  //編碼
window.open( "../test/downloadFile.action?json="+strJson);

(4)運行結果以下
在這裏插入圖片描述字體

參考博客地址:https://blog.csdn.net/top__one/article/details/65442390編碼

相關文章
相關標籤/搜索