1. itext7史上最全实战总结
1.1. 前言
最近有个需求需要我用Java手动写一份PDF报告,经过考察几种pdf开源代码,最终选取了itext7,此版本为7.1.11
,由于发现网上关于该工具的博文比较少,特别是实战博文几乎没有,在我踩完各种坑,最终把PDF成型后,打算把经验分享出来,本文通过摘录解释来说明,内容来自本人GitHub itext-pdf
1.2. 配置文件
项目采用了Spring Cloud config
所以配置在git上,仅仅研究itext7不需要用到数据库等功能,请直接运行PdfMain
类的main
方法,即可生成模拟的PDF报告
1.3. 版本POM
itext7相关pom
<properties>
<itext.version>7.1.11</itext.version>
</properties>
<dependencies>
<!-- itext7 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdftest</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.18</version>
</dependency>
<!--itext7 html转pdf用到的包-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
1.4. 干货
itext7语义本身和前端css很像,所以有点前端基础还是比较容易掌握的
1.4.1. 添加图片
- 读取项目中图片文件
- 设置边距
- 设置宽高扩大缩小Image indexImage = new Image(ImageDataFactory.create(GenoReportBuilder.class.getClassLoader().getResource("image/gene.png"))); indexImage.setMargins(-50, -60, -60, -60); indexImage.scale(1, 1.05f);
1.4.2. 添加指定空白页
- 添加第2页为空白页,立即刷新后再继续添加
pdf.addNewPage(2).flush();
1.4.3. Div、Paragraph
Div div = new Div();
div.setWidth(UnitValue.createPercentValue(100));
div.setHeight(UnitValue.createPercentValue(100));
div.setHoriz