背景
接上文 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 = PdfWriter.getInstance(document, new FileOutputStream(filePath));
document.addTitle(doc.getDocName());
document.addAuthor("xxxxx");
document.addCreationDate();
document.addLanguage("中文");
document.open();
设置自定义字体
File fontFile = new File("font/msyh.ttf");
BaseFont bf = BaseFont.createFont(fontFile.getAbsolutePath(), 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);
PdfPCell cell;
cell = new PdfPCell(new Paragraph("接口地址",fontChinese5));
table.addCell(cell);
cell = new PdfPCell(new Paragraph(interfaceInfoDO.getInterfaceAddress(),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('Loading...');
} else {clearInterval(interval);
console.info('Load Success...');
var sidebarToggle = $("#sidebarToggle");
var viewOutline = $("#viewOutline");
if(!sidebarToggle.hasClass("toggled")){sidebarToggle.click();
}
if(!viewOutline.hasClass("toggled")){viewOutline.click();
}
}
}
</script>
展现成果