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
7.1.11
com.itextpdf
kernel
${itext.version}
com.itextpdf
io
${itext.version}
com.itextpdf
layout
${itext.version}
com.itextpdf
forms
${itext.version}
com.itextpdf
pdfa
${itext.version}
com.itextpdf
pdftest
${itext.version}
com.itextpdf
font-asian
${itext.version}
org.slf4j
slf4j-log4j12
1.7.18
com.itextpdf
html2pdf
3.0.0
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.setHorizontalAlignment(HorizontalAlignment.CENTER);
Paragraph p1 = new Paragraph();
p1.setHorizontalAlignment(HorizontalAlignment.CENTER);
p1.setMaxWidth(UnitValue.createPercentValue(75));
p1.setMarginTop(180f);
p1.setCharacterSpacing(0.4f);
Style large = new Style();
large.setFontSize(22);
large.setFontColor(GenoColor.getThemeColor());
p1.add(new Text("尊敬的 ").addStyle(large));
...
Paragraph p2 = new Paragraph();
...
div.add(p1);
div.add(p2);
整块的内容用Div包裹,这里整块包裹的好处是什么?一方面排版分明成体系,另一方面若需求是整块的内容必须在同一个版面,你可以对Div设置div.setKeepTogether(true);,尽量保证若整块的内容超出了一页,那这块内容会自动整块出现在下一页,上一页剩下的就留白了
可以看到Div,Paragraph可以设置很多属性,实际上我们常用的组件除了这两种,还有Table,Cell,