SpringBoot集成itextpdf动态⽣成pdf并展⽰
背景
接上⽂SpringBoot集成markdown实现⽂档管理,对于表格的⽀持markdown不是特别友好,同时内部⽂档管理需要增加表格式api接⼝⽂档的功能,所以决定采⽤结合数据库存储与动态⽣成pdf借助⽬录结构展⽰的⽅式
表结构设计
⽬录表
DROP TABLE IF EXISTS `knowledge_interfacecatalog`;
CREATE TABLE `knowledge_interfacecatalog` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`UnitGuid` varchar(50) DEFAULT NULL,
`AddDate` datetime DEFAULT NULL,
`CataName` varchar(100) DEFAULT NULL,
`ParentCataGuid` varchar(50) DEFAULT NULL,
`SortNum` int(11) DEFAULT NULL,
`DocGuid` varchar(50) DEFAULT NULL,
KEY `ID` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
接⼝内容表
DROP TABLE IF EXISTS `knowledge_interfaceinfo`;
CREATE TABLE `knowledge_interfaceinfo` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`UnitGuid` varchar(50) DEFAULT NULL,
`AddDate` datetime DEFAULT NULL,
`InterfaceName` varchar(100) DEFAULT NULL,
`Description` varchar(500) DEFAULT NULL,
`Remark` varchar(500) DEFAULT NULL,
`ParamJson` varchar(2000) DEFAULT NULL,
`ResponseJson` varchar(2000) DEFAULT NULL,
`InterfaceAddress` varchar(500) DEFAULT NULL,
`SortNum` int(11) DEFAULT NULL,
`CataGuid` varchar(50) DEFAULT NULL,
`DocGuid` varchar(50) DEFAULT NULL,
KEY `ID` (`ID`)
)
ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4;
录⼊界⾯
PDF⽣成
引⽤
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
创建PDF
Document document = new Document(PageSize.A2);
PdfWriter writer = Instance(document, new FileOutputStream(filePath));
document.DocName());
document.addAuthor("xxxxx");
document.addCreationDate();
document.addLanguage("中⽂");
document.open();
设置⾃定义字体
File fontFile = new File("f");
BaseFont bf = AbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font fontChinese5 = new Font(bf,14);
添加章节与段落
//⽬录的字体
Font cataFont = new Font(bf, 24, Font.NORMAL, BaseColor.BLACK);
// 接⼝的字体
Font interFont = new Font(bf, 20, Font.NORMAL, BaseColor.BLACK);
for(int i=1;i<=10;i++){
Chapter chapter = new Chapter(new Paragraph("⽬录", cataFont),i);
for(int j=1;j<=5;j++){
Section section = chapter.addSection(new Paragraph("接⼝", interFont));
}
document.add(chapter);
}
document.close();
添加表格
PdfPTable table = new PdfPTable(3);//⽣成⼀个3列的表格
//表格垂直居中
table.setHorizontalAlignment(Element.ALIGN_CENTER);
table.setTotalWidth(800f);
float[] widths = new float[] { 150f,325f,325f };
table.setWidths(widths);
springboot结构
PdfPCell cell;
cell = new PdfPCell(new Paragraph("接⼝地址",fontChinese5));
table.addCell(cell);
cell = new PdfPCell(new InterfaceAddress(),fontChinese5));
cell.setColspan(2);
table.addCell(cell);
制表符替换
在pdf⽣成过程中\t制表符⽆效导致样式变动,需要进⾏编码替换replace("\t","\u00a0\u00a0\u00a0\u00a0")
PDF展⽰
这⾥选择的是pdf.js进⾏展⽰,引⽤相关⽂件,地址栏出⼊file代表url地址即可,因为⽤于接⼝⽂档展⽰,所以我需要默认进⼊就是⽬录模式,所以需要对页⾯进⾏相关js处理
<script type="text/javascript">
var interval = setInterval('loadPdf()', 1000);
function loadPdf() {
if (PDFViewerApplication.pdfDocument == null) {
console.info('');
} else {
clearInterval(interval);
console.info('');
var sidebarToggle =  $("#sidebarToggle");
var viewOutline =  $("#viewOutline");
if(!sidebarToggle.hasClass("toggled")){
sidebarToggle.click();
}
if(!viewOutline.hasClass("toggled")){
viewOutline.click();
}
}
}
</script>
展⽰效果

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。