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 閱讀(619) 評論(0)  編輯  收藏 所屬分類: iText

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


          網站導航:
           
          主站蜘蛛池模板: 张家川| 洛南县| 丽水市| 汶上县| 桃源县| 武义县| 兴义市| 孝义市| 嘉善县| 平昌县| 灌阳县| 遵义县| 堆龙德庆县| 昌吉市| 合水县| 屯门区| 嘉义县| 措勤县| 华容县| 庆安县| 于田县| 阳新县| 健康| 丹江口市| 东台市| 沐川县| 涿鹿县| 安宁市| 交城县| 临澧县| 白沙| 黎川县| 循化| 梧州市| 巴青县| 东城区| 阿克陶县| 徐水县| 阿荣旗| 乐清市| 仙游县|