Atea - Hero's Grave

          面向?qū)ο螅_源,框架,敏捷,云計(jì)算,NoSQL,商業(yè)智能,編程思想。

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

          以下為示例程序
           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、填模板數(shù)據(jù)
          33             ByteArrayOutputStream opsTemp = new ByteArrayOutputStream();
          34             PdfStamper stamp = new PdfStamper(template, opsTemp);
          35             AcroFields form = stamp.getAcroFields();
          36             form.setField("XXX""XXX"); // PDF模板上預(yù)先設(shè)置好的控件
          37             stamp.setFormFlattening(true);
          38             stamp.close();
          39             PdfReader data = new PdfReader(opsTemp.toByteArray());
          40 
          41             // 3、把處理好數(shù)據(jù)的模板導(dǎo)入當(dāng)前Document
          42             PdfImportedPage page = writer.getImportedPage(data, 1);
          43             Image image = Image.getInstance(page);
          44             document.add(image);
          45 
          46             // 計(jì)算分頁時(shí)機(jī)
          47             // 有時(shí)候需要寫,要不然接下來的內(nèi)容顯示不出來(比如在一個page里Percent和大于100)
          48             // document.newPage();
          49 
          50             // 4、重復(fù)執(zhí)行2&3以填充動態(tài)數(shù)據(jù)
          51 
          52             // 5、繼續(xù)做其他處理
          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 閱讀(619) 評論(0)  編輯  收藏 所屬分類: iText

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 麦盖提县| 山阴县| 个旧市| 中超| 凤山县| 曲阳县| 什邡市| 灵璧县| 渭南市| 台北县| 长治市| 淮滨县| 永登县| 隆昌县| 清远市| 江油市| 玉林市| 南木林县| 惠来县| 吉安市| 东乌| 北碚区| 彰武县| 宜川县| 浦北县| 乌兰浩特市| 普兰县| 洪湖市| 文化| 泰来县| 旺苍县| 卓尼县| 浦江县| 孝感市| 吴旗县| 岐山县| 鲁甸县| 潼关县| 尉犁县| 襄垣县| 长子县|