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

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


          網站導航:
           
          主站蜘蛛池模板: 武鸣县| 玛沁县| 含山县| 西乌珠穆沁旗| 宿松县| 永胜县| 湄潭县| 绥芬河市| 桦南县| 双鸭山市| 静乐县| 定西市| 怀化市| 婺源县| 吉隆县| 武平县| 长子县| 新安县| 商洛市| 务川| 南汇区| 汉源县| 磴口县| 土默特右旗| 石嘴山市| 彩票| 临猗县| 肇源县| 丹寨县| 香河县| 手游| 阿拉善右旗| 嘉义县| 区。| 堆龙德庆县| 阜康市| 马关县| 清丰县| 辽源市| 曲周县| 浦县|