Atea - Hero's Grave

          面向對象,開源,框架,敏捷,云計算,NoSQL,商業智能,編程思想。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            40 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks
          PDF不像EXCEL那樣靈活,要想處理動態數據,基本有2種方法
          1、純程序畫
          風險較大,可行性低
          2、把模板里的動態部分單獨做成模板
          使用Foxit PDF Editor編輯PDF模板元素,把動態數據部分的模板按一條(一行)提取出來單獨做一頁,使用時動態引入。

          以下為示例程序
           1 package itext.my;
           2 
           3 import java.io.ByteArrayOutputStream;
           4 import java.io.FileOutputStream;
           5 import java.io.OutputStream;
           6 
           7 import org.junit.Test;
           8 
           9 import com.lowagie.text.Document;
          10 import com.lowagie.text.Image;
          11 import com.lowagie.text.PageSize;
          12 import com.lowagie.text.pdf.AcroFields;
          13 import com.lowagie.text.pdf.PdfImportedPage;
          14 import com.lowagie.text.pdf.PdfReader;
          15 import com.lowagie.text.pdf.PdfStamper;
          16 import com.lowagie.text.pdf.PdfWriter;
          17 
          18 public class ImportedPages {
          19 
          20     @Test
          21     public void hello() {
          22 
          23         try {
          24             Document document = new Document(PageSize.LETTER, 0000);
          25 
          26             // 1、讀取模板
          27             PdfReader template = new PdfReader("pdf/template/t.pdf");
          28             OutputStream ops = new FileOutputStream("output/t.pdf");
          29             PdfWriter writer = PdfWriter.getInstance(document, ops);
          30             document.open();
          31 
          32             // 2、填模板數據
          33             ByteArrayOutputStream opsTemp = new ByteArrayOutputStream();
          34             PdfStamper stamp = new PdfStamper(template, opsTemp);
          35             AcroFields form = stamp.getAcroFields();
          36             form.setField("XXX""XXX"); // PDF模板上預先設置好的控件
          37             stamp.setFormFlattening(true);
          38             stamp.close();
          39             PdfReader data = new PdfReader(opsTemp.toByteArray());
          40 
          41             // 3、把處理好數據的模板導入當前Document
          42             PdfImportedPage page = writer.getImportedPage(data, 1);
          43             Image image = Image.getInstance(page);
          44             document.add(image);
          45 
          46             // 計算分頁時機
          47             // 有時候需要寫,要不然接下來的內容顯示不出來(比如在一個page里Percent和大于100)
          48             // document.newPage();
          49 
          50             // 4、重復執行2&3以填充動態數據
          51 
          52             // 5、繼續做其他處理
          53 
          54             document.close();
          55             opsTemp.close();
          56             ops.close();
          57 
          58         } catch (Exception e) {
          59             e.printStackTrace();
          60         }
          61 
          62     }
          63 }


          posted on 2009-10-30 15:41 Atea 閱讀(615) 評論(0)  編輯  收藏 所屬分類: iText

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 黄石市| 阿图什市| 紫云| 蒲江县| 道孚县| 台山市| 哈密市| 定陶县| 广南县| 北宁市| 武平县| 耒阳市| 石屏县| 鲁甸县| 仁化县| 南川市| 隆安县| 浮梁县| 湖州市| 杭锦旗| 贺兰县| 洛扎县| 舞钢市| 文安县| 瑞丽市| 辽宁省| 潼关县| 邵武市| SHOW| 胶南市| 岐山县| 吕梁市| 蒲江县| 阿克苏市| 上饶市| 绥江县| 林周县| 大埔县| 凤冈县| 德阳市| 象州县|