Java IText PDF分页模板制作 输出

195 篇文章 1 订阅

  相信很多朋友在项目中或多或少会遇到报表打印的需求,然而精确套打的实现更是一份苦差呀。近日在网上找到一份chm文档,虽然这是某家公司产品开发文档(大家不要误会,我可不是想在这做广告哦,这个产品要是免费就更好了,呵呵),但是对PDF模板制作有很详细的讲解,而且里面还有视频。。。相信大家一看就会了!

       通过iText可以调用PDF模板,对模板中的字段动态赋值,从而实现套打(也就是说,我们可以不依赖这份文档中提到的产品),当我们报表的样式或位置需要调整时,我们之需修改模板即可。下一篇Blog我会给大家一个示例,等不急的话大家可以到网上找找,这方面的资料还是蛮多的。

       好了,不多说了,大家快行动吧。

  

下面这个servlet代码填充模板(见附件中testEx.pdf文件)中的字段,代码如下:

java 代码
  1. import javax.servlet.*;   
  2. import javax.servlet.http.*;   
  3. import java.io.*;   
  4.   
  5. import com.lowagie.text.*;   
  6. import com.lowagie.text.pdf.*;   
  7.   
  8. public class GenPdfServlet extends HttpServlet {   
  9.   
  10.     protected void doGet(HttpServletRequest request,   
  11.             HttpServletResponse response) throws ServletException,   
  12.             java.io.IOException {   
  13.         response.reset();   
  14.         ByteArrayOutputStream ba = new ByteArrayOutputStream();   
  15.         try {   
  16.             /* 打开已经定义好字段以后的pdf模板 */  
  17.             String TemplatePDF = getServletContext().getRealPath(".")   
  18.                     + "testEx.pdf";   
  19.             PdfReader reader = new PdfReader(TemplatePDF);   
  20.   
  21.             /* 将要生成的目标PDF文件名称 */  
  22.             PdfStamper stamp = new PdfStamper(reader, ba);   
  23.   
  24.             PdfContentByte under = stamp.getUnderContent(1);   
  25.   
  26.             /* 使用中文字体 */  
  27.             BaseFont bf = BaseFont.createFont("STSong-Light""UniGB-UCS2-H",   
  28.                     BaseFont.NOT_EMBEDDED);   
  29.             Font FontChinese = new Font(bf, 12, Font.NORMAL);   
  30.   
  31.             /* 取出报表模板中的所有字段 */  
  32.             AcroFields form = stamp.getAcroFields();   
  33.   
  34.             /* 为字段赋值,注意字段名称是区分大小写的 */  
  35.             form.setField("name""lixy");   
  36.             form.setField("age""26");   
  37.   
  38.             stamp.setFormFlattening(true);   
  39.             /* 必须要调用这个,否则文档不会生成的 */  
  40.             stamp.close();   
  41.         } catch (DocumentException de) {   
  42.             de.printStackTrace();   
  43.             System.err.println("A Document error:" + de.getMessage());   
  44.         }   
  45.         response.setContentType("application/pdf");   
  46.         /* 如果想出来让IE提示你是打开还是保存的对话框,加上下面这句就可以了 */  
  47.         // response.setHeader("Content-disposition","attachment; filename="  
  48.         // +"report.pdf" );   
  49.         response.setContentLength(ba.size());   
  50.         try {   
  51.             ServletOutputStream out = response.getOutputStream();   
  52.             ba.writeTo(out);   
  53.             out.flush();   
  54.             out.close();   
  55.             ba.close();   
  56.         } catch (IOException e) {   
  57.             e.printStackTrace();   
  58.             System.err.println("A Document error:" + e.getMessage());   
  59.         }   
  60.     }   
  61. }  

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值