<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技術相關

    主站蜘蛛池模板: 亚洲一级毛片免观看| 国产在线jyzzjyzz免费麻豆| 在线精品亚洲一区二区| 亚洲色精品vr一区二区三区| 成人永久福利免费观看| 国产成人福利免费视频| 免费黄网站在线观看| 精品成人一区二区三区免费视频| 亚洲国产亚洲综合在线尤物| 亚洲精品狼友在线播放| 久久亚洲精品专区蓝色区| 国产精品久久免费视频| 91嫩草国产在线观看免费| 高清免费久久午夜精品| 亚洲av日韩av永久在线观看| 中文字幕在线日亚洲9| 亚洲熟妇无码爱v在线观看| 久久青青成人亚洲精品| 无码免费午夜福利片在线| 毛片无码免费无码播放 | 久久久久国产精品免费免费不卡| 成年网在线观看免费观看网址| 亚洲精品美女久久久久久久| 亚洲精品一二三区| 国内精品久久久久影院亚洲| 亚洲人成伊人成综合网久久| 亚洲午夜国产精品无卡| 亚洲高清无在码在线无弹窗| 亚洲色图黄色小说| 亚洲最大免费视频网| 亚洲av成人综合网| 中中文字幕亚洲无线码| 亚洲男人天堂2018av| 亚洲精品美女久久7777777| 亚洲综合国产成人丁香五月激情| 亚洲人成www在线播放| 亚洲精品无码成人| 国产精品无码亚洲一区二区三区| 久久综合亚洲色HEZYO社区| 亚洲精品国产成人| 日本亚洲色大成网站www久久|