最近被安排公司项目的一个活:根据给定的模板生成pdf,很多公司的项目涉及这种xxx单的生成,我这里是个检查单的生成,具体内容下面给出,和各位csdner一起分享学习一下,如有不对多多指教。

首先先看下需求:

给定的pdf:

为了不涉密,基本上类似于这种模板。

之前没做过啊,百度一下午关于spring boot 生成pdf的方法,找了ireport 和jasperreports,正打算用这个后来有coder说这个版本比较挑JDK,最新的5.X版本只适配1.6(如果没错的话)的jdk,要知道我们的项目是基于1.8以上的,妥妥的放弃了。接着找,说使用itext,研究了一下itext,可以自动生成pdf,也可以根据pdf模板获取field的值进行填充。但是看看我们的模板,数据都是动态填充的,怎么能用固定模板,处理仿list的列都是一个难点。

项目中之前都是生成word,excel,pdf没有,好吧,没有现成的让我用,那我自己设计实现一个吧。

引入jar包依赖:(我们的项目用gradle管理的,使用中央管理仓库,这个可以去官网去查,找自己适配的版本)

第一个引入itext  jar包,用来调用itext的基本工具类:PdfpTable、PdfpCell等

第二个引入asian jar包,用来实现自定义字体,实现宋体和中文编码:

BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);


这个搞定就可以开发了。这个模板最难的不是list,那都是小case。最难的就是那个复选框。

itextpdf没有对复选框提供一个使用的工具类,有个CheckBox不能当做在PdfpCell(单元格)填充,然后我就百度找了一圈,后来有人说用自定义一个table当做复选框。我这里的复选框不需要对框做取值,所以我就使用这种思路做了一个自定义的CheckBox。

//自定义设置复选框的样式
    public PdfPTable getCheck(){PdfPCell checkCell =null;PdfPTable checkTable = new PdfPTable(1);checkTable.setWidthPercentage(2);checkCell = new PdfPCell();checkCell.setMinimumHeight(5f);checkCell.setBorder(Rectangle.BOX);checkCell.setBorderWidth(1);
//        checkCell.setLeading(5,5);
        checkCell.setFixedHeight(2f);checkTable.addCell(checkCell);return checkTable;}

复选框调用示例:

PdfPCell cellCheck2 = new PdfPCell(getCheck());
//        cellCheck2.setLeading(3f,1.2f);
//        cellCheck2.setPaddingTop(10f);
        cellCheck2.setPaddingRight(2f);cellCheck2.setPaddingTop(2f);cellCheck2.setPaddingBottom(2f);
//        cellCheck2.setPaddingLeft(2f);
        cellCheck2.setBorder(0);cellCheck2.setFixedHeight(2f);tableRecieve.addCell(cellCheck2);

代码有点冗余,需要的童鞋可以参考这个思路,但是在使用的时候放在cell里面,由于这个单元格并不能很好的控制它的宽度,所有对宽度的设置都是相对值,所以在使用的时候还要对其上下左右的padding进行设置。

基本思路就是这样,耗时两天做一个模板,并动态生成数据,这个都是最简单的。

模板里面各种table当cell套用,多看看API的调用就可以了,其他的没啥难点。希望可以帮助到大家。

Spring boot基于itext实现定制化模板pdf生成功能相关推荐

  1. Spring Initializr私服搭建和定制化模板

    概述 Spring Initializr是Spring官方提供,用来创建SpringBoot项目的脚手架. Spring官方Spring Initializr:https://start.spring ...

  2. Spring Boot基于itext实现PDF生成功能

    一. 创建一个SpringBoot项目工程: https://start.spring.io/ 二.引入相应的POM坐标 <dependency><groupId>com.it ...

  3. 基于百度EasyDL定制化图像识别平台的海洋鱼类识别方法

    [目的]鱼类识别对渔业资源的开发利用有着重要的意义.针对海底环境恶劣.拍摄环境亮度低.场景模糊的实际情况导致海底观测视频品质差,视频中的鱼类识别难的问题以及现有鱼类识别方法存在的鱼类标注数据集过少导致 ...

  4. Spring BOOT ( 基于Kotlin 编程语言) 使用 Spring WebFlux 实现响应式编程

    Spring BOOT ( 基于Kotlin 编程语言) 使用 Spring WebFlux 实现响应式编程 image.png 参考文档:https://docs.spring.io/spring/ ...

  5. Spring boot基于redis实现附近的人(附源码下载)

    此文章是针对去年写的Java基于Redis实现"附近的人 进行业务优化! 核心源码 public class NearbyPO {@NotNull(message = "id值不能 ...

  6. (附源码)spring boot基于微信小程序的口腔诊所预约系统 毕业设计 201738

    小程序springboot口腔诊所预约系统 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱, ...

  7. APP+spring boot基于Android智能手机的微课程学习系统设计与实现 毕业设计-附源码100909

    摘  要 随着现在网络的快速发展,网络的应用在各行各业当中它很快融入到了许多学校的眼球之中,他们利用网络来做这个微课程学习系统的网站,随之就产生了"智能手机的微课程学习系统 ",这 ...

  8. (附源码)APP+spring boot基于Android智能手机的微课程学习系统设计与实现 毕业设计100909

    摘  要 随着现在网络的快速发展,网络的应用在各行各业当中它很快融入到了许多学校的眼球之中,他们利用网络来做这个微课程学习系统的网站,随之就产生了"智能手机的微课程学习系统 ",这 ...

  9. APP+spring boot基于Android智能手机的微课程学习系统设计与实现 毕业设计源码100909

    摘  要 随着现在网络的快速发展,网络的应用在各行各业当中它很快融入到了许多学校的眼球之中,他们利用网络来做这个微课程学习系统的网站,随之就产生了"智能手机的微课程学习系统 ",这 ...

最新文章

  1. MDNN:一种用于药物-药物反应预测的多模态深度神经网络
  2. 九十六、双指针和滑动窗口算法模板
  3. 192.168.8.1手机登陆_手机怎么登陆192.168.2.1入口?
  4. iOS - Swift 与 Objective-C 互相操作
  5. 我的小导师-天津大学张梅山老师要招NLP方向的研究生啦!
  6. element-ui中rules使用正则表达式进行校验
  7. 引用阿里图标库的三种方式——多色图标我选symbol
  8. eclipse中文教程
  9. 开wifi微信定位服务器,企业微信wifi定位
  10. 列联表分析基于R语言
  11. 笔记本win10 QQ能登上,网页打不开
  12. ES slop问题纪录
  13. 【关于听任大佬的讲话的深刻感悟】
  14. 机器学习之置信区间上界算法
  15. ARM_kafka搭建
  16. 最简单的加密---异或加密
  17. 批量生成insert语句的方法(word转excel,excel用公式生成insert)
  18. LiveMedia视频平台与第三方国标平台级联对接异常断流
  19. 用R进行多元线性回归分析建模
  20. latex 页眉页脚

热门文章

  1. 用Unity写一个12306验证器的恶搞图生成软件
  2. 甜糖心愿 网心云 操作指南
  3. LSM-Tree介绍
  4. 汇编文件大写.S后缀和小写.s后缀的区别
  5. 学习大数据,公司常用开发的编程语言是什么?
  6. Peter Schiff:如果大饼跌破3万刀,那么它将跌破1万
  7. 大公司病了,这也太形象了吧!!!
  8. 简单的数据结构介绍(栈、队列、数组、链表、红黑树)
  9. 朗强:HDMI视频画面分割器基本工作原理和性能
  10. 微信小程序上传单张或多张图片