1. 程式人生 > >Java IText PDF分頁模板製作 輸出

Java IText PDF分頁模板製作 輸出

  相信很多朋友在專案中或多或少會遇到報表列印的需求,然而精確套打的實現更是一份苦差呀。近日在網上找到一份chm文件,雖然這是某家公司產品開發文件(大家不要誤會,我可不是想在這做廣告哦,這個產品要是免費就更好了,呵呵),但是對PDF模板製作有很詳細的講解,而且裡面還有視訊。。。相信大家一看就會了!

       通過iText可以呼叫PDF模板,對模板中的欄位動態賦值,從而實現套打(也就是說,我們可以不依賴這份文件中提到的產品),當我們報表的樣式或位置需要調整時,我們之需修改模板即可。下一篇Blog我會給大家一個示例,等不急的話大家可以到網上找找,這方面的資料還是蠻多的。

       好了,不多說了,大家快行動吧。

  

下面這個servlet程式碼填充模板(見附件中testEx.pdf檔案)中的欄位,程式碼如下:

java 程式碼
  1. import javax.servlet.*;   
  2. import javax.servlet.http.*;   
  3. import java.io.*;   
  4. import com.lowagie.text.*;   
  5. import com.lowagie.text.pdf.*;   
  6. publicclass GenPdfServlet extends HttpServlet {   
  7. protectedvoid doGet(HttpServletRequest request,   
  8.             HttpServletResponse response) throws ServletException,   
  9.             java.io.IOException {   
  10.         response.reset();   
  11.         ByteArrayOutputStream ba = new ByteArrayOutputStream();   
  12. try {   
  13. /* 開啟已經定義好欄位以後的pdf模板 */
  14.             String TemplatePDF = getServletContext().getRealPath(".")   
  15.                     + "testEx.pdf";   
  16.             PdfReader reader = new PdfReader(TemplatePDF);   
  17. /* 將要生成的目標PDF檔名稱 */
  18.             PdfStamper stamp = new PdfStamper(reader, ba);   
  19.             PdfContentByte under = stamp.getUnderContent(1);   
  20. /* 使用中文字型 */
  21.             BaseFont bf = BaseFont.createFont("STSong-Light""UniGB-UCS2-H",   
  22.                     BaseFont.NOT_EMBEDDED);   
  23.             Font FontChinese = new Font(bf, 12, Font.NORMAL);   
  24. /* 取出報表模板中的所有欄位 */
  25.             AcroFields form = stamp.getAcroFields();   
  26. /* 為欄位賦值,注意欄位名稱是區分大小寫的 */
  27.             form.setField("name""lixy");   
  28.             form.setField("age""26");   
  29.             stamp.setFormFlattening(true);   
  30. /* 必須要呼叫這個,否則文件不會生成的 */
  31.             stamp.close();   
  32.         } catch (DocumentException de) {   
  33.             de.printStackTrace();   
  34.             System.err.println("A Document error:" + de.getMessage());   
  35.         }   
  36.         response.setContentType("application/pdf");   
  37. /* 如果想出來讓IE提示你是開啟還是儲存的對話方塊,加上下面這句就可以了 */
  38. // response.setHeader("Content-disposition","attachment; filename="
  39. // +"report.pdf" );
  40.         response.setContentLength(ba.size());   
  41. try {   
  42.             ServletOutputStream out = response.getOutputStream();   
  43.             ba.writeTo(out);   
  44.             out.flush();   
  45.             out.close();   
  46.             ba.close();   
  47.         } catch (IOException e) {   
  48.             e.printStackTrace();   
  49.             System.err.println("A Document error:" + e.getMessage());   
  50.         }   
  51.     }   
  52. }  
  • 描述: PDF模板檔案