SpringBoot集成itextpdf动态生成pdf并展示

简介: 接上文SpringBoot集成markdown实现文档管理,对于表格的支持markdown不是特别友好,同时内部文档管理需要增加表格式api接口文档的功能,所以决定采用结合数据库存储与动态生成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 = 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>

展示效果

目录
相关文章
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
463 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
297 6
|
3月前
|
开发框架 前端开发 JavaScript
在Winform分页控件中集成导出PDF文档的功能
在Winform分页控件中集成导出PDF文档的功能
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
380 4
|
3月前
|
XML Java BI
怎么通过itextpdf架包实现报表导出为pdf文件?
Java通过itextpdf架包实现报表导出为pdf文件
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
336 1
|
5月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
176 2
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Kafka的集成应用
Spring Boot与Kafka的集成应用

热门文章

最新文章

下一篇
无影云桌面