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

    主站蜘蛛池模板: 好男人视频社区精品免费| 57PAO成人国产永久免费视频| 日韩高清免费观看| 国产精品亚洲片在线va| 野花高清在线电影观看免费视频| 亚洲综合久久一本伊伊区| 永久免费av无码不卡在线观看 | 98精品全国免费观看视频| 日韩亚洲Av人人夜夜澡人人爽| 无码中文字幕av免费放dvd| 亚洲综合在线成人一区| 色se01短视频永久免费| 亚洲国产无线乱码在线观看| 四虎永久在线免费观看| 又黄又大的激情视频在线观看免费视频社区在线 | 免费手机在线看片| 久久久久亚洲AV无码专区桃色| 中国videos性高清免费| 久久精品国产亚洲av四虎| **真实毛片免费观看 | 亚洲午夜久久久精品电影院| 三年片在线观看免费大全| 国产亚洲精品仙踪林在线播放| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲AV日韩AV鸥美在线观看| av无码久久久久不卡免费网站| 久久久久久亚洲精品影院| 国产一区二区视频免费| 日韩免费高清播放器| 亚洲毛片基地日韩毛片基地| 日韩精品视频免费网址| 久久久精品国产亚洲成人满18免费网站| 亚洲人成网www| 国产精品色午夜免费视频| 国产一精品一AV一免费| 亚洲色大成网站www久久九| 黑人大战亚洲人精品一区| 免费黄色福利视频| 久久国产乱子伦精品免费午夜 | 老司机亚洲精品影视www| 97国产免费全部免费观看|