背景
接上文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>
展现成果