`
Clover_whd
  • 浏览: 14428 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

ITEXT PDF 模板输出

 
阅读更多

一、需求:将数据,以表格形式输出PDF

二、方法:利用itext 操作pdf模板

三、资源:Adobe Acrobat Pro  、itextpdf-5.5.3 、itext-asian.jar

四、操作

1.制作pdf模板,在word文档中画出你想要输出的表格、

 

 

打开Adobe Acrobat Pro——》选择“创建PDF表单”——》选择源:(PDF、Word、Excel或其它文件类型),下一步 ——》定位Word文件路径,下一步——》点击"工具"-"表单"-"编辑" 可编辑表单字段名称位置



 
2.部分代码:

===================================================================================

String fpath = this.getServletContext().getRealPath("cm/tp")+File.separator;   //模板路径,自己改
     PdfReader reader = new PdfReader(fpath+"model.pdf");    //设计好的pdf模板
     PdfStamper ps = new PdfStamper(reader, response.getOutputStream());
    
     AcroFields fields = ps.getAcroFields();
     fillData(fields, bm2map(po),fpath);       // bm2map()是一个方法,返回值为Map,po是一个类对象,将模板 中的key和value组合成map,key为模板中字段域的名字,value为要输出的值
     /** 下面是处理图片,获得图片抽点,绝对位置输出到pdf模板中**/
     String img_uri = po.getImgUri();
     if(img_uri!=null && !img_uri.trim().equals("")){
      String fimg = uploadServlet.getBindPath(img_uri);
      File fs = uploadServlet.getFnBySize(new File(fimg),600);
      if(fs!=null){
       Image gif = Image.getInstance(fs.getPath());
       gif.setAbsolutePosition(450, 200);
       gif.scaleToFit(300, 300);
       PdfContentByte over = ps.getOverContent(2);
       over.addImage(gif,true);
      }
     }
     ps.setFormFlattening(true);
     ps.getWriter().flush();
     ps.close();

 ====================================================================================

 public static void fillData(AcroFields fields, Map<String, String> data,String fpath) throws IOException, DocumentException {
  BaseFont bfChinese = BaseFont.createFont(fpath+"simfang.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);      //引用了simfang.ttf字体
  for (String key : data.keySet()) {
       String value = data.get(key);
       fields.setFieldProperty(key, "textfont", 
         bfChinese,
         //BaseFont.createFont() ,
         null);  
       fields.setField(key, value);
     }
  }

 ================================组合模板键值对的方=================================

public  Map<String, String> bm2map(Bm bm) {
     Map<String, String> data = new HashMap<String, String>();
      data.put("bh",bm.getBh());
      data.put("lbCplb",bm.getLbCplb());
      data.put("ysd", bm.getYsd());
      data.put("jb",bm.getJb());
      SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
      if(bm.getGlRcrq()!=null)
      data.put("rgrq", sf.format(bm.getGlRcrq()).toString());
      data.put("mc",bm.getMc());
      data.put("ymc",bm.getMcYmc());
      data.put("mz",bm.getMz());
      data.put("nd",bm.getNdSd());
      data.put("zd",bm.getZd());
      if(bm.getSlCtsl()!=null)
      data.put("sl",bm.getSlCtsl()+"件");
      data.put("wccd",bm.getWcCd());
      data.put("zl",bm.getCc());
      data.put("bz",bm.getBz());
      data.put("tkr",bm.getTkr());
      if(bm.getDtCreate()!=null)
      data.put("tkrq",sf.format(bm.getDtCreate()).toString());
      data.put("imgUri", ""); 
      data.put("js",bm.getMsJs());
     return data;
   }

 

 五、不足:

1.PDF模板输出中会遇到部分常用字符包括中文无法显示,尝试设置不同字体,利用itext-asign各种版本字体,但还是没能完全解决,于是引入simfang.ttf字体,可显示全部中文,但缺点是,pdf的体积会变大。不知是否有更好的办法~以及其他方式的模板输出~

说明:此文章为自己的小总结,代码来源于网上各种大牛的文章~

  • 大小: 66.5 KB
  • 大小: 90.5 KB
分享到:
评论

相关推荐

    adobe pdf编辑器 java利用itextpdf根据模板导出pdf配套资源

    模板方法通常涉及到预先设计好的PDF模板,其中可能包含占位符,然后在运行时替换这些占位符以填充实际数据。例如,可以创建一个包含表格、段落、图片的模板PDF,然后用实际的数据替换模板中的占位符字段。 以下是一...

    itextpdf-5.5.5.jar

    5. **模板和表单**:iTextPDF支持在PDF模板上填充数据,这对于批量生成相似文档非常有用。同时,它还提供了处理Acrobat表单的能力,包括填写、读取和删除表单字段。 6. **PDF/A兼容性**:PDF/A是一种标准化的PDF...

    itextpdf按模版导出PDF(表单,表格,条码,二维码)

    首先,你需要加载带有表单的PDF模板,然后使用`AcroFields`类来访问和修改表单字段。 ```java PdfReader reader = new PdfReader("template.pdf"); AcroFields fields = reader.getAcroFields(); fields.set...

    itextpdf将html生成pdf所需要的全部jar

    在将HTML转换为PDF的场景中,FreeMarker可以用来处理HTML模板,填充数据并生成最终的HTML内容,然后由iTextPDF将其转化为PDF。 4. jfinal-2.0.jar:JFinal是一个基于Java的轻量级Web框架,它简化了Web应用的开发...

    itextpdf java 转pdf jar 包

    需要注意的是,iTextPDF库还有许多高级特性,如版面布局、模板、PDF/A合规性等,这些都需要根据具体需求进行学习和应用。此外,随着版本更新,iTextPDF引入了更多的模块,如iTextPDF的PDFHTML模块,可以将HTML转换为...

    java iText 实现从数据库中导出数据到已有的PDF模板

    文件`TestPdf`可能是测试用的PDF模板或者生成的PDF输出。为了进一步理解这个过程,可以打开这个文件查看其结构,或者用iText的API进行分析。 总的来说,Java结合iText实现从数据库导出数据到PDF模板涉及了数据库...

    java 基于iText的PDF输出(源码)

    添加模板 添加文本内容 设置文本字体 设置文本字体大小 设置字体颜色 设置表单域颜色 组件方法调用: addTempl(String templKey,String templFileName),注册一个模板文件; addText(String templKey,String key,...

    使用itext生成pdf需要的jar包

    1. iText主库:`itextpdf-版本号.jar` - 这是iText的核心库,包含了生成PDF的所有基本功能。 2. Bouncy Castle库:`bcprov-jdk15on-版本号.jar` - iText在处理加密和数字签名时依赖Bouncy Castle库,因此需要将其...

    itext导出PDF所需jar包

    iReport提供了一个可视化的报表设计界面,用户可以通过拖放操作创建复杂的报表布局,然后结合iText生成PDF输出。它支持SQL查询、数据集、参数、子报表等功能,使得非程序员也能轻松设计报表。 在实际开发中,这四个...

    springboot使用itext生成pdf并保存到本地

    &lt;artifactId&gt;itextpdf &lt;version&gt;5.5.13 ``` 接下来,我们需要一个HTML页面作为PDF的源内容。你可以使用任何你喜欢的方式(如Thymeleaf或Freemarker)来创建HTML,然后使用iText的HTML-to-PDF转换功能将其转换为...

    使用iText生成PDF.doc

    iText 是一个强大的 Java 类库,专为生成和编辑PDF文档而设计。它以其灵活性和易用性在开发社区中广受欢迎。通过iText,开发者可以轻松创建包含文本、图像、表格等各种元素的PDF文件。以下是一些关于如何使用iText...

    freemarker+itext生成PDF

    这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...

    itext7 pdf转图片

    在IT行业中,iText是一个广泛使用的Java和.NET库,用于创建、编辑和处理PDF文档。在最新的版本iText 7中,它提供了丰富的功能,包括将PDF文档转换为图像。这个话题涉及到PDF处理和图像转换两个核心领域。下面将详细...

    Android用itext库生成中文PDF文档

    然后,选择一个输出流(如文件流或网络流)来保存PDF。例如: ```java PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); ``` 在`TempProj`这个项目中,可能包含了已经处理过的iText库jar...

    itext生成pdf所需的jar包

    1. iText相关的jar:这可能包括`itextpdf.jar`,这是iText的主要库,包含了创建和操作PDF的基本功能。 2. Freemarker的jar:例如`freemarker.jar`,这是Freemarker模板引擎的核心库。 3. XMLWorker的jar:例如`...

    velocity+itext导出pdf

    总结起来,"Velocity+Itext导出PDF"是一种高效且灵活的方式,可以将动态数据和预定义的模板结合,生成高质量的PDF文档。通过熟练掌握这两个工具的使用,开发者可以创建出满足各种需求的PDF文档生成系统。

    java使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包)

    &lt;artifactId&gt;itextpdf &lt;version&gt;5.x.x&lt;/version&gt; &lt;!-- 请根据最新版本号替换 --&gt; ``` 确保版本号是最新的,以便利用其所有功能和修复的bug。 接下来,我们探讨如何在PDF中插入文本。使用`Document`对象作为容器...

    itext设置段落行间距.zip

    1. 加载PDF模板文件,获取AcroFields对象:`PdfReader reader = new PdfReader("template.pdf"); AcroFields fields = reader.getAcroFields();` 2. 查找表单字段:`String fieldName = "你的表单字段名";` 3. 填充...

    基于SpringBoot实现的生成工资条源代码,使用FreeMarker模板引擎, iTextPdf生成工资条PDF

    在这个项目中,我们看到标题和描述提到了使用SpringBoot来实现工资条的生成,这涉及到两个关键的技术:FreeMarker模板引擎和iTextPdf库。 首先,FreeMarker是一个强大的模板引擎,常用于动态生成HTML或其他类型的...

    iText2.1.7资料大全(制作PDF的java开源框)

    相关教程 iText 简介 iText创建文档简介 iText入门实例 IText使用PDF模板输出报表的实践 我和iText第一次亲密接触 相关JAR iText-2.1.7.jar(核心) iTextAsian.jar(中文支持) iText-rups-2.1.7.jar iText-rtf-...

Global site tag (gtag.js) - Google Analytics