Springboot通过模板生成pdf文档带图片

环境:springboot2.3.10.RELEASE + itextpdf5.5.13.2

依赖

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

注意:itext-asian该依赖不引入不会报错,但是文本信息不会显示。

制作模版
1,先通过word制作模版,再将该word文档另存为pdf文档。

2,使用Adobe Acrobat Pro DC打开刚另存为的pdf文档

3,在工具中搜索“域”,找到准备表单,选择识别表单域,

4,编辑域,有部分表单域会识别不到,需要我们手动去添加,选择 添加文本域 ,标记出一块区域出来,并命名,这块区域就是我们新添加的域。

5,标记好所有域之后,保存模板。

生成PDF工具类

import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import org.springframework.core.io.ClassPathResource;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.Map;
import com.itextpdf.text.Document;public class PDFUtil {public static void genPdf(Map<String,String> map, HttpServletResponse response) {try {//模板文件相对路径ClassPathResource resource = new ClassPathResource("static/student.pdf");PdfReader pdfReader = new PdfReader(resource.getInputStream()) ;ByteArrayOutputStream baos = new ByteArrayOutputStream();PdfStamper stamper = new PdfStamper(pdfReader, baos);AcroFields af = stamper.getAcroFields();af.setField("fill_1", map.get("name")) ;af.setField("fill_2", map.get("sno")) ;af.setField("fill_3", map.get("major")) ;af.setField("fill_4", map.get("place")) ;// 插入图片AcroFields.FieldPosition position = af.getFieldPositions("fill_5").get(0) ;int pageNo = position.page ;Rectangle signRect = position.position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance("E:\\CaiJiXiTong\\图标\\11.jpg");// 获取操作的页面PdfContentByte under = stamper.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);// 设置输出pdf// 如果为false那么生成的PDF文件还能编辑,一定要设为truestamper.setFormFlattening(true);stamper.close();//响应到客户端String downloadFileName = new String((map.get("name") + "个人信息.pdf").getBytes("utf-8"),"iso8859-1");response.addHeader("Content-Disposition", "attachment;filename="+downloadFileName);OutputStream os = new BufferedOutputStream(response.getOutputStream());Document doc = new Document();PdfCopy copy = new PdfCopy(doc, os);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(baos.toByteArray()), 1);copy.addPage(importPage);doc.close();response.setContentType("application/pdf");os.flush();os.close();} catch (Exception e) {System.out.println("生成PDF错误:"+e) ;}}
}

接口

@GetMapping("download")public void download(HttpServletResponse response) {Map<String,String> map = new HashMap<>();map.put("major","计算机生命与科学");map.put("name","李小");map.put("place","北京");map.put("sno","001");PDFUtil.genPdf(map, response);}

结果

Springboot通过模板生成pdf文档带图片相关推荐

  1. 使用FreeMarker生成word文档(带图片),word转pdf,预览pdf,pdf下载工具类

    一.下载或配置: 下载jar包 :freemaker的jar包下载 下载jar包 :aspose-words的jar包下载 或者配置maven依赖: pom.xml添加aspose的依赖包(maven ...

  2. java使用itextpdf生成pdf文档指定图片印章位置

    项目结构 1.引包 <dependencies><!-- itextpdf--><dependency><groupId>com.itextpdf< ...

  3. Java生成PDF文档 iText使用PDF模板一

    最近在弄这个java生成pdf,哎,在网上查找了各种各样的学习资料,弄了几天,今天终于把这个效果简单的弄出来,所以,也把这个,我所走过的坑,作一个记录,提供接下来需要学习的人. 参考文献文档:http ...

  4. 一键生成PDF文档的书签和目录(书签,目录页带页码 都行)

    转自:https://blog.csdn.net/u010391342/article/details/86681359 一键生成PDF文档的书签目录 原创codeing_doc 发布于2019-01 ...

  5. 使用word模板生成word文档的各类方案

    使用word模板生成word文档的各类方案 生成word的各种方案 word另存xml进行后续处理 2003版本word(.doc)的xml处理并生成word 2007版本word(.docx)的xm ...

  6. java-制作flt模板,导出word文档带图片循环

    java-制作flt模板,导出word文档带图片循环 模板制作 制作xml 编辑xml文档 将xml模板转换为flt 编写工具类 导出word工具类 获取远程图片 使用示例 使用示例--springb ...

  7. 使用itext和JasperReports生成PDF文档

    1>方法一Itext来实现生成文档这个pdf的文档 1.使用Itext来实现生成我都这个PDF的文档,代码如下 public static void main(String[] args) {t ...

  8. 【报表技术】IReport图形化报表开发工具生成PDF文档

    [报表技术]IReport图形化报表开发工具生成PDF文档 新建一个文件. 由于IReport的默认设置是不支持中文的,IReport没有内置中文的包. 了解报表模板结构. ①title:报表标题. ...

  9. app canvas渲染后图片黑色_H5 基于 canvas 实现电子签名并生成PDF文档

    (给前端大全加星标,提升前端技能) 转自:coyota666 https://juejin.cn/post/6901273585428463624 前言 电子签名通俗来说就是通过技术手段实现在电子文档 ...

最新文章

  1. R语言dim函数返回NULL
  2. 转载:C++ list 类学习笔记
  3. [T-ARA][Goodbye, OK]
  4. 差分能量分析介绍(三)
  5. 七种常见分布式事务详解(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)
  6. tomcat 8.5 远程登录管理页面
  7. 第一次冲刺-团队开发(第六天)
  8. layuit 框架_UI框架Layui入门介绍
  9. 数美黑产研究院|揭秘黑产非法盗爬访问与非法占座“抢票”行径
  10. 中兴B860AV1.1_机顶盒_(4G和8G版)刷机固件升级和教程
  11. ug建模减速器_UG齿轮减速器建模方法
  12. Windows下PHP环境的搭建
  13. SWUN 1437 - 我是一个粉刷匠
  14. SigmaStudio之Sine Tone的Freq\Ison换算
  15. Java计算时间,可以像微信朋友圈那样显示发布的时间
  16. 我该如何拯救你,我的考研?
  17. 自定义UDF、UDAF、UDTF函数
  18. HTML和css结合的第二种方式 head中用style语句
  19. 如何注册全部DLL文件以及DLL简要说明
  20. 使用纯 python 实现 Instruments 协议,跨平台 (win,mac,linux) 获取 iOS 性能数据

热门文章

  1. 自己选择的路,跪着也要走完。(励志)
  2. [1]尝试用Unity3d制作一个王者荣耀(持续更新)-AssetBundle管理器
  3. 面试官是如何筛选简历?
  4. deepin linux清理软件包
  5. 八万块经济实用空间大,油耗低,就买这几款车
  6. 七夜在线音乐台开发 第二弹
  7. 分析师眼中的盖茨:堪比汽车大王亨利·福特
  8. Siamese-fc孪生网络目标跟踪
  9. Python字符串替换replace、截取[]、查找find、计数count、分割split
  10. Android TV Leanback (八)(引导步骤)