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