java生成和操作pdf表单

Java操作pdf分为三种情况:

  1. 读取pdf通过坐标进行填充数据,绘制成结果pdf。
  2. 通过Adobe Acrobat生成pdf form,通过Java设置form表单中的元素值进行数据填充。
  3. 通过itext绘制pdf。

优缺点:
第一种,格式和位置较灵活,难度中;
第二种,位置在模板pdf中固定,格式也不够灵活,难度小;
第三中,格式内容位置都灵活,难度大;

引入的jar包:


	com.itextpdf
	itextpdf
	5.5.6


	com.itextpdf.tool
	xmlworker
	5.5.6

第二种方式:
word制作报表样式–>转pdf–>acrobat设置pdf表单属性–>itext填充数据–>输出pdf
需要工具:excel/word , adobe acrobat Pro
1.使用word或excel绘制好想要的图形后点击另存为pdf

2.使用adobe acrobat Pro打开pdf,点击如图表单按键,选择添加或编辑域。
java生成和操作pdf表单_第1张图片

3.进入如图所示界面,可以对每个域进行命名、字体等属性的设置
java生成和操作pdf表单_第2张图片

  1. Java操作pdf
    PdfReader reader = new PdfReader("D:\\shouju.pdf");
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      PdfStamper ps = new PdfStamper(reader, bos);
      /**
       * 使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 Adobe 宋体 std L
       */
      AcroFields s = ps.getAcroFields();
      //设置key-value值 
      //通过s.setFieldProperty("字段名", "textfont", BaseFont , null); 设置字段的格式或者在模板中修改样式
      s.setField("checkNo", "20161108");
      s.setField("info", "测试单位");
      s.setField("projectName_1", "测试项目");
      s.setField("num_1", "2");
      s.setField("bw_1", "1");
      s.setField("amount_1", "100000000");
      s.setField("total", "壹佰万整");
      s.setField("bz_1", "个");
      s.setField("SKR", "测试人");
      s.setField("SKDW", "测试单位");
      s.setField("year", "2016");
      s.setField("mouth", "11");
      s.setField("day", "08");
      // 设为true
      ps.setFormFlattening(true);
      ps.close();
      FileOutputStream fos = new FileOutputStream("d:\\shouju_fb.pdf");
      fos.write(bos.toByteArray());

结果如图:
java生成和操作pdf表单_第3张图片

针对FormFlattening的设置,之前表述不够清楚。
设置为false的情况:
java生成和操作pdf表单_第4张图片
上方为key1,赋值为日期:20180918
下方为key2,赋值为设置情况;
环境: jdk1.7,mac,itext5,adobe
处理后的结果为: 文本域可以进行编辑;打开文件时文字不会出现;双击文本域以后文字会出现;对文本域的文字进行修改后保存,文字可以一直显示。如下图
java生成和操作pdf表单_第5张图片

你可能感兴趣的:(新手小白技术)