Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门

Posted lookupthesky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门相关的知识,希望对你有一定的参考价值。

 

Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门

 

生成pdf有很多种方法,如通过freemarker,或 使用itextpdf。本文将使用itextpdf生成pdf

 

1.下载Adobe Acrobat DC 并安装

从官网http://get.adobe.com/cn/reader/otherversions/下载

或者下载绿色版本

安装完之后又如下图标:

 技术分享图片

 

 

2.将word文件通过Adobe Acrobat DC生成pdf模板

 

 技术分享图片

 

 

 技术分享图片

 

 技术分享图片

 

如需要填充的是姓名和身份信息,如设置属性为realName 和idNo

 

3.运行结果如下

 

技术分享图片

 

 

4.填充代码

 

  1 /**
  2  * Project Name:mk-project <br>
  3  * Package Name:com.suns.pdf <br>
  4  *
  5  * @author mk <br>
  6  * Date:2018-11-2 14:32 <br>
  7  */
  8 
  9 package com.suns.pdf;
 10 
 11 import com.itextpdf.text.pdf.AcroFields;
 12 import com.itextpdf.text.pdf.BaseFont;
 13 import com.itextpdf.text.pdf.PdfReader;
 14 import com.itextpdf.text.pdf.PdfStamper;
 15 import org.apache.commons.io.FileUtils;
 16 import org.apache.commons.io.IOUtils;
 17 
 18 import java.io.File;
 19 import java.io.FileOutputStream;
 20 import java.io.IOException;
 21 import java.util.HashMap;
 22 import java.util.Map;
 23 
 24 /**
 25  * Description: PdfUtils <br>
 26  * 依赖的包:itextpdf    itext-asian
 27  * commons-io,commons-codec
 28  * @author mk
 29  * @Date 2018-11-2 14:32 <br>
 30  * @Param
 31  * @return
 32  */
 33 public class PdfUtils {
 34 
 35 
 36     public static void main(String[] args) throws IOException {
 37         HashMap map = new HashMap<String, String>();
 38         map.put("realName","对应pdf中的表单名为realName");
 39         map.put("idNo","对应pdf中的表单名为idNo");
 40         String path = PdfUtils.class.getResource("/template").getPath();
 41         System.out.println("path:"+path);
 42         String sourceFile = path + File.separator + "test.pdf";
 43         String targetFile = "d:/pdf/test_fill.pdf";
 44         genPdf(map,sourceFile,targetFile);
 45     }
 46 
 47     private static void genPdf(HashMap map, String sourceFile, String targetFile) throws IOException {
 48         File templateFile = new File(sourceFile);
 49         fillParam(map, FileUtils.readFileToByteArray(templateFile), targetFile);
 50     }
 51 
 52     /**
 53      * Description: 使用map中的参数填充pdf,map中的key和pdf表单中的field对应 <br>
 54      * @author mk
 55      * @Date 2018-11-2 15:21 <br>
 56      * @Param
 57      * @return
 58      */
 59     public static void fillParam(Map<String, String> fieldValueMap, byte[] file, String contractFileName) {
 60         FileOutputStream fos = null;
 61         try {
 62             fos = new FileOutputStream(contractFileName);
 63             PdfReader reader = null;
 64             PdfStamper stamper = null;
 65             BaseFont base = null;
 66             try {
 67                 reader = new PdfReader(file);
 68                 stamper = new PdfStamper(reader, fos);
 69                 stamper.setFormFlattening(true);
 70                 base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
 71                 AcroFields acroFields = stamper.getAcroFields();
 72                 for (String key : acroFields.getFields().keySet()) {
 73                     acroFields.setFieldProperty(key, "textfont", base, null);
 74                     acroFields.setFieldProperty(key, "textsize", new Float(9), null);
 75                 }
 76                 if (fieldValueMap != null) {
 77                     for (String fieldName : fieldValueMap.keySet()) {
 78                         acroFields.setField(fieldName, fieldValueMap.get(fieldName));
 79                     }
 80                 }
 81             } catch (Exception e) {
 82                 e.printStackTrace();
 83             } finally {
 84                 if (stamper != null) {
 85                     try {
 86                         stamper.close();
 87                     } catch (Exception e) {
 88                         e.printStackTrace();
 89                     }
 90                 }
 91                 if (reader != null) {
 92                     reader.close();
 93                 }
 94             }
 95 
 96         } catch (Exception e) {
 97             System.out.println("填充参数异常");
 98             e.printStackTrace();
 99         } finally {
100             IOUtils.closeQuietly(fos);
101         }
102     }
103 }

 

以上是关于Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门的主要内容,如果未能解决你的问题,请参考以下文章

adobe acrobat pro 怎么激活

adobe acrobat多少钱

修改PDF中文字好用的软件,PDF编辑软件,adobe acrobat DC安装教程,adobe acrobat DC和 adobe acrobat pro的区别,

修改PDF中文字好用的软件,PDF编辑软件,adobe acrobat DC安装教程,adobe acrobat DC和 adobe acrobat pro的区别,

adobeacrobatprodc有缓存吗

adobe acrobat怎么激活