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 阅读(603) 评论(0)  编辑  收藏 所属分类: iText

只有注册用户登录后才能发表评论。


网站导航: