itext7 生成pdf操作过于复杂,特别是封面、目录页码以及页眉页脚的处理需要基于事件处理,因此写了个简单的类库用于简化操作,只用关注文档内容的构建而无需关注其他;
代码地址: https://gitee.com/zherc/itext7-simple
maven依赖
<dependency>
<groupId>io.gitee.zherc</groupId>
<artifactId>itext7-simple</artifactId>
<version>0.0.1</version>
</dependency>
实现PDF渲染器
渲染顺序为 内容>目录>封面
public class TestPdfRender implements PdfRender {
/**
* 渲染封面
* @param document 文档对象
*/
@Override
public void cover(ItextDocument document) {
try {
Div div = new Div();
div.setDestination("cover");
div.add(new Paragraph("封面").setFontColor(Color.parse("#FFFFFF")));
div.setWidth(document.getPageWidth());
div.setHeight(document.getPageHeight());
PdfImageXObject imageXObject = new PdfImageXObject(ImageDataFactory.create(new URL("https://zhiper-cdn.oss-cn-shanghai.aliyuncs.com/2051961.jpg")));
BackgroundImage image = new BackgroundImage(imageXObject);
div.setProperty(Property.BACKGROUND_IMAGE, image);
Table table = new Table(4);
table.setBorder(Border.NO_BORDER);
table.addHeaderCell("标题一");
table.addHeaderCell("标题二");
table.addHeaderCell("标题三");
table.addHeaderCell("标题四");
div.add(table);
document.add(div);
} catch (Exception e) {
}
PdfOutline outlines = document.getPdfDocument().getOutlines(true);
outlines.addOutline("封面", 0).addDestination(PdfDestination.makeDestination(new PdfString("cover")));
}
/**
* 渲染目录
* @param document 文档对象
*/
@Override
public void directory(ItextDocument document) {
Div div = new Div(