<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    The important thing in life is to have a great aim , and the determination

    常用鏈接

    統計

    IT技術鏈接

    保險相關

    友情鏈接

    基金知識

    生活相關

    最新評論

    IText使用PDF模板輸出報表的實踐(轉)

    本文所要用到的工具或jar主要有: Acrobat 8 這個主要用來制作PDF模板、eclipse這個看你喜歡咯(你用其他也行) 、 itext.jar、
    還有為了解決中文的輸出問題,需要多下載一個名為iTextAsian.jar的JAR包。這個包里面定義了與中文輸出相關的一些文件。
    好了,需要做的就是這些了,簡單的PDF生成這里就不再作介紹了,本文主要講解如何使用PDF模板。
    我們先來看看制作出來的效果:


    上圖表格上及表格中的數據是動態添加進去的,頁數為兩頁(為節約版面現只顯示一頁)
    兩頁都是用的同一模板的,
    1、 模板的制作:
    我主要使用的是Acrobat8.0,上面所用到的模板是由 周工作報告 模板修改而來的,如果想學習如何新建一個新的模板,大家可以參照下這里吧!
    http://lxy19791111.javaeye.com/blog/102848
    2、 取得每個表單域的名字
    模板制作好后,要插入數據首先就要知道需要插在模板中位置,
    Java代碼 復制代碼
    1.   //需要生成后的PDF    
    2. FileOutputStream fos = new FileOutputStream("c:/test/Pdf.pdf");    
    3.   //PDF模板路徑    
    4. String TemplatePDF ="c:/test/PdfTemplate.pdf";    
    5.        PdfReader reader = new PdfReader(TemplatePDF);      
    6. PdfStamper stamp = new PdfStamper(reader,fos);    
    7. AcroFields form = stamp.getAcroFields();    
    8. for (Iterator it = form.getFields().keySet().iterator(); it    
    9. .hasNext();) {    
    10. System.out.println(it.next());    
    11. }   

    這個是打印后的部分結果:

    我們只取后面那個命名就行,如"星期四[3]"
    當然,模板是你自己定義,文本域的命名你當然知道了,這里只是作個簡單介紹而已。
    3、下面是插入數據及PDF合并的代碼:
    Java代碼 復制代碼
    1. package com.golden.info.test;   
    2.   
    3. import java.io.ByteArrayOutputStream;   
    4. import java.io.FileNotFoundException;   
    5. import java.io.FileOutputStream;   
    6. import java.io.IOException;   
    7. import java.util.Date;   
    8.   
    9. import com.lowagie.text.Document;   
    10. import com.lowagie.text.DocumentException;   
    11. import com.lowagie.text.pdf.AcroFields;   
    12. import com.lowagie.text.pdf.PdfCopy;   
    13. import com.lowagie.text.pdf.PdfImportedPage;   
    14. import com.lowagie.text.pdf.PdfReader;   
    15. import com.lowagie.text.pdf.PdfStamper;   
    16. public class TestPdfTemplate {     
    17.     public static void main(String[] args) {   
    18.         try {   
    19.             int count = 8;// 總記錄數   
    20.             int pageCount = 4;// 每頁記錄數   
    21.             int index = 1// 表格序號   
    22.             int page = 0;// 總共頁數   
    23.             /** 主要控制總共的頁數*/  
    24.             if (count >= pageCount && count % pageCount == 0) {   
    25.                 page = count / pageCount;   
    26.             } else {   
    27.                 page = count / pageCount + 1;   
    28.             }   
    29.             String TemplatePDF = "c:/test/PdfTemplate.pdf";//設置模板路徑   
    30.             FileOutputStream fos = new FileOutputStream("c:/test/Pdf.pdf");//需要生成PDF   
    31.                
    32.             ByteArrayOutputStream baos[] = new ByteArrayOutputStream[page];//用于存儲每頁生成PDF流   
    33.             /** 向PDF模板中插入數據 */  
    34.             for (int item = 0; item < page; item++) {   
    35.                 baos[item] = new ByteArrayOutputStream();   
    36.                 PdfReader reader = new PdfReader(TemplatePDF);   
    37.                 PdfStamper stamp = new PdfStamper(reader, baos[item]);   
    38.                 AcroFields form = stamp.getAcroFields();   
    39.                 form.setField("DepartmnetNmae""藍飛");//插入的數據都為字符類型   
    40.                 form.setField("qq""252462807");                  
    41.                 form.setField("pageNumber""第" + (item + 1) + "頁,共" + page   
    42.                         + "頁");   
    43.                 if (count % pageCount != 0 && item == page - 1) {   
    44.                     System.out.println("====pageCount+" + pageCount + "=====");   
    45.                     pageCount = count % pageCount;   
    46.                 }   
    47.                 /**因為PDF中的表格其實是眾多的文本域組成,就是一個數組,所以把它循環出來就可以了*/  
    48.                 for (int j = 0; j < pageCount; j++) {   
    49.                     form.setField("ProjectTask[" + j + "]", index + "");   
    50.                     form.setField("星期一[" + j + "]""星期一[" + index + "]");   
    51.                     form.setField("星期二[" + j + "]""星期二[" + index + "]");   
    52.                     form.setField("星期三[" + j + "]""星期三[" + index + "]");   
    53.                     form.setField("星期四[" + j + "]""星期四[" + index + "]");   
    54.                     form.setField("星期五[" + j + "]""星期五[" + index + "]");   
    55.                     form.setField("星期六[" + j + "]""星期六[" + index + "]");   
    56.                     form.setField("星期日[" + j + "]""星期日[" + index + "]");   
    57.                     form.setField("意見[" + j + "]""同意[" + j + "]");   
    58.                     index++;   
    59.                 }   
    60.                 stamp.setFormFlattening(true); // 千萬不漏了這句啊, */   
    61.                 stamp.close();   
    62.             }   
    63.             Document doc = new Document();   
    64.             PdfCopy pdfCopy = new PdfCopy(doc, fos);   
    65.             doc.open();   
    66.             PdfImportedPage impPage = null;   
    67.             /**取出之前保存的每頁內容*/  
    68.             for (int i = 0; i < page; i++) {   
    69.                 impPage = pdfCopy.getImportedPage(new PdfReader(baos[i]   
    70.                         .toByteArray()), 1);   
    71.                 pdfCopy.addPage(impPage);   
    72.             }   
    73.             doc.close();//當文件拷貝  記得關閉doc   
    74.         } catch (FileNotFoundException e) {   
    75.             e.printStackTrace();   
    76.         } catch (IOException e) {   
    77.             e.printStackTrace();   
    78.         } catch (DocumentException e) {   
    79.             e.printStackTrace();   
    80.         }   
    81.   
    82.     }   
    83. }  


    至于,生于PDF后,想打印出來,只要調用以下代碼就行了
    Java代碼 復制代碼
    1.            
    2. try{                
    3. Executable ex = new Executable();          
    4.        ex.openDocument("c:/test/Pdf.pdf");              
    5.     ex.printDocument("c:/test/Pdf.pdf");   
    6.     }catch(IOException e){       
    7.     e.printStackTrace();         
    8.     }  

    到這里,運用上面的那些代碼,就完成了PDF模板輸出報表.
    (PDF模板、代碼跟運行結果在附件里)
    有錯誤之處請指正.
    也希望這篇文章可以幫到您.

    posted on 2009-08-12 09:53 鴻雁 閱讀(4512) 評論(0)  編輯  收藏 所屬分類: IT技術相關

    主站蜘蛛池模板: 亚洲AV一区二区三区四区| 亚洲va成无码人在线观看| 一级黄色片免费观看| 亚洲人色大成年网站在线观看| 久久久久免费看黄a级试看| 亚洲人JIZZ日本人| 日本免费中文视频| 亚洲视频2020| 国产精品色拉拉免费看| 亚洲videosbestsex日本| 在线观着免费观看国产黄| 国产亚洲日韩在线a不卡| 亚洲色欲久久久久综合网| 中文永久免费观看网站| 亚洲国产精品无码久久一区二区| 国内少妇偷人精品视频免费| 国产无遮挡吃胸膜奶免费看| 猫咪免费观看人成网站在线| 精品国产人成亚洲区| 十九岁在线观看免费完整版电影| 亚洲人成影院午夜网站| 又爽又黄无遮挡高清免费视频 | 亚洲欧洲另类春色校园网站| 成人性生交大片免费看午夜a| 精品女同一区二区三区免费播放| 国产亚洲午夜高清国产拍精品| 男人的天堂网免费网站| 亚洲日韩一区精品射精| 亚洲片一区二区三区| 香蕉免费一区二区三区| 亚洲小说图区综合在线| 麻豆国产精品免费视频| 亚洲Aⅴ在线无码播放毛片一线天| 中文字幕中韩乱码亚洲大片| 97国产在线公开免费观看| 亚洲AV无码国产一区二区三区| 亚洲综合色婷婷七月丁香| 特黄aa级毛片免费视频播放| 亚洲成熟xxxxx电影| 永久免费毛片手机版在线看| 国产情侣久久久久aⅴ免费|