一,准备工作

1,需要下载一个工具,Adobe Accrobat Pro DC

2,准备一个word文档,然后保存为pdf格式

这边需要插入数据的地方要用下划线,不然识别不到;

3,在Adobe Accrobat Pro DC中打开保存的pdf文件,然后如下图所示

这些黑底的字,就是要插入的数据的类似占位符(个人理解);可以根据自己需求更改如下图所示;比如我把fill_1_2改成title

4,准备依赖

        <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

现在准备工作就做好了,下一步插入数据

二,插入数据

直接上代码

package com.example.util;import com.itextpdf.text.pdf.*;
import sun.misc.BASE64Encoder;import java.io.*;import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;public class PdfUtils {public void pdfUtil(){//模板路径String inputUrl = "E:\\testaa.pdf";//生成的文件路径String outputUrl = "E:\\c.pdf";//图片地址String pictureUrl = "E:\\aplus\\1.jpg";byte[] bytes = null;OutputStream os = null;PdfStamper ps = null;PdfReader reader = null;ByteArrayOutputStream bos = null;try {Calendar instance = Calendar.getInstance();//我的需求需要用到时间int i = instance.get(Calendar.YEAR);int i1 = instance.get(Calendar.MONTH);int i2 = instance.get(Calendar.DAY_OF_MONTH);int i3 = i2+1;//图片的输入流FileInputStream fileInputStream = new FileInputStream(pictureUrl);bytes = new byte[fileInputStream.available()];fileInputStream.read(bytes);//图片转码BASE64Encoder encoder = new BASE64Encoder();os = new FileOutputStream(new File(outputUrl));//读取pdf表单reader = new PdfReader(inputUrl);//根据表单生成一个新的pdf文件ps = new PdfStamper(reader,os);//获取pdf表单AcroFields form = ps.getAcroFields();bos = new ByteArrayOutputStream();//给表单中添加中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);form.addSubstitutionFont(bf);Map<String,Object> data = new HashMap<String, Object>();data.put("year",i);data.put("month",i1);data.put("beginday",i2);data.put("endday",i3);data.put("title","需要添加的数据");data.put("question1","需要添加的数据");data.put("basis1","需要添加的数据");data.put("requlations1","需要添加的数据");data.put("lev1","需要添加的数据");data.put("suggest1","需要添加的数据");data.put("question2","需要添加的数据");data.put("basis2","需要添加的数据");data.put("requlations2","需要添加的数据");data.put("lev2","需要添加的数据");data.put("suggest2","需要添加的数据");data.put("image1",encoder.encode(bytes));data.put("image2",encoder.encode(bytes));//遍历map集合,对应的填进去,本人测试过,如果没有与黑底的字段匹配的,那么那个部分数据填充就是空for (String key:data.keySet()) {form.setField(key, String.valueOf(data.get(key)));}ps.setFormFlattening(true);} catch (Exception e) {e.printStackTrace();}finally {try {ps.close();reader.close();os.close();} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args) {PdfUtils pdfUtils = new PdfUtils();pdfUtils.pdfUtil();}
}

最终效果图

java在pdf模板中插入数据相关推荐

  1. Java向pdf模板中写入数据并在模板之后添加新的表格内容

    场景:我们经常会需要用代码生成pdf文件,涉及到复杂的内容也可以选用先自己制作pdf模板,再用代码去读取,动态数据部分的内容无法用模板实现的就要用Java代码去实现 需求:生成如下的pdf 实现思路: ...

  2. 使用itextpdf在pdf模板中插入对应数据

    大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 目录 大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 1.需求描述 2.操作Adobe Acrobat ...

  3. java如何向数据库中插入数据_如何控制Java代码向数据库中插入数据

    慕哥6287543 Java程序向数据库中插入数据,代码如下:123456789101112131415161718192021222324252627282930313233343536373839 ...

  4. 用java向mysql数据库中插入数据为空

    利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util ...

  5. mysql数据库插入数据为空_用java向mysql数据库中插入数据为空

    利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util ...

  6. java word模版填充_[转载]java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  7. java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据

    java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据 使用插件:spire.doc 创建工具类,上代码: import com.spire.doc.D ...

  8. java pdf 模板多页数据导出

    现在普遍java PDF 导出就是2种形式 1.模板导出 提前在windows下编辑好模板,并且配好表单(因为不是重点这部分自行百度) 2.在java中编写pdf 在使用java代码编写模板和灌数据, ...

  9. java pdf 报表_关于Java向PDF模板写入数据,以及java制作pdf报表的问题

    1.关于java向PDF模板写入数据 写的特别全一步一步来就行. (1)首先下载一个pdf编辑工具Adobe Acrobat DC (2)准备一个pdf模板文件(你可以把自己创建一个只有表头没有内容的 ...

最新文章

  1. python怎么读取文件-python怎么读取文件内容
  2. 下面代码打印的结果?
  3. SDK 和 API 的区别是什么?
  4. [HNOI2010 Planar平面图判定]
  5. SpringCloud 从菜鸟到大牛之八 服务容错 Hystrix
  6. oracle不弹出另存为,Oracle另存为~
  7. Agenda for Mac(多功能日历管理工具)中文版
  8. javascript实现页面自动刷新和自动跳转代码
  9. 两款实用免费的文档免积分下载工具,支持百度文库、豆丁网等
  10. android+实时ping工具,安卓ping测试工具
  11. NOIP2016普及组T3(海港)题解
  12. 详解SR锁存器不定态
  13. maker mv rpg 源码_rpgmakermv插件
  14. 最小二乘法(least squares)的曲线拟合(curve fitting)
  15. 如何使用CK-S610-A01擦写RI-TRP-DR2B-40玻璃管标签的数据信息
  16. 用ps增加照片的气氛--镜头光晕
  17. 登录页面,登录后跳转不成功
  18. broker-list与bootstrap-server辨析
  19. 主域控崩溃后,备域如何快速接管主域控制器
  20. 2020 试卷中的生词(05)

热门文章

  1. Centos 8.1存储多路径配置
  2. Nmap-06:Nmap的NSE脚本使用
  3. 水处理仪器仪表用R型变压器的特点?
  4. micro focus cobol 文件大小限制
  5. 刘馨文:新闻发布决定SEO的成败
  6. U盘中毒了文件怎么找回来
  7. pdf文件怎么修改图片
  8. python自制手写稿处理神器
  9. PostgreSQL数据库分区裁剪——predicate_refuted_by_recurse
  10. 百度地图多点路线规划_自驾游必备,多地点路线规划功能已经出炉了!!!