美文网首页
Swagger2接口文档导出为pdf格式

Swagger2接口文档导出为pdf格式

作者: 心淡然如水 | 来源:发表于2021-04-30 14:46 被阅读0次

    添加swagger相关配置

    1、依赖配置

            <!-- swagger -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
    
            <!-- 接口API生成html文档 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>
    
            <!--解决控制层接受参数为Integer类似的参数,访问swagger页面报错-->
            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-models</artifactId>
                <version>1.5.21</version>
            </dependency>
    
            <dependency>
                <groupId>io.github.swagger2markup</groupId>
                <artifactId>swagger2markup</artifactId>
                <version>1.3.1</version>
            </dependency>
    

    2、编写config

    package com.hag.opmos.config;
    
    import io.swagger.annotations.ApiOperation;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    /**
     * @Package: com.hag.opmos.config
     * @ClassName: swaggerConfig
     * @Author: Administrator
     * @Date:2021/4/30 10:55
     * @Description:
     */
    @Configuration
    @EnableSwagger2
    public class swaggerConfig implements WebMvcConfigurer {
        @Bean
        public Docket createREstApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .enable(true)
                    .select()
                    .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                    .apis(RequestHandlerSelectors.basePackage("com.hag.opmos.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("web api")
                    .description("接口说明")
                    .version("1.0.0")
                    .build();
        }
    
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**")
                    .addResourceLocations("classpath:/static/");
    
            registry.addResourceHandler("swagger-ui.html")
                    .addResourceLocations("classpath:/META-INF/resources/");
    
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/");
            WebMvcConfigurer.super.addResourceHandlers(registry);
        }
    }
    
    

    这时候可以运行一下试试看看能出来swagger页面不。没问题继续....

    4、编写all.adoc Test文件

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
            </dependency>
    
    package com.hag.opmos.test;
    
    import com.hag.opmos.App;
    import io.github.swagger2markup.Swagger2MarkupConfig;
    import io.github.swagger2markup.Swagger2MarkupConverter;
    import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder;
    import io.github.swagger2markup.markup.builder.MarkupLanguage;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.net.URL;
    import java.nio.file.Paths;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = App.class)
    public class SwaggerTest {
        @Test
        public void generateAsciiDocs() throws Exception {
            //    输出Ascii格式
            Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                    .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                    .build();
            //此处填写swagger项目地址
            Swagger2MarkupConverter.from(new URL("http://127.0.0.1:11003/v2/api-docs"))
                    .withConfig(config)
                    .build()
                    .toFile(Paths.get("src/docs/asciidoc/generated/all"));
        }
    }
    

    这里运行测试用例以前先启用app.js,在执行测试用例

    5、插件配置

    <plugin>
                    <groupId>org.asciidoctor</groupId>
                    <artifactId>asciidoctor-maven-plugin</artifactId>
                    <version>1.5.6</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.asciidoctor</groupId>
                            <artifactId>asciidoctorj-pdf</artifactId>
                            <version>1.5.0-alpha.11</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>output-html</id>
                            <phase>generate-resources</phase>
                            <goals>
                                <goal>process-asciidoc</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <sourceDirectory>src/docs/asciidoc/generated</sourceDirectory>
                        <outputDirectory>src/docs/asciidoc/pdf</outputDirectory>
                        <backend>pdf</backend>
                    </configuration>
                </plugin>
    

    最后执行


    image.png
    image.png

    pdf 格式错误问题解决:
    maven仓库中的asciidoctorj-pdf jar包,使用压缩工具打开:

    进入asciidoctorj-pdf-1.5.0-alpha.16.jar\gems\asciidoctor-pdf-1.5.0.alpha.16\data\ 目录
    fonts:字体文件目录
    themes:配置文件目录

    下载字体:

    字体下载:https://github.com/chloerei/asciidoctor-pdf-cjk-kai_gen_gothic/releases
    注:只需下载KaiGenGothicCN-Bold.ttf、KaiGenGothicCN-Bold-Italic.ttf、KaiGenGothicCN-Bold-Italic.ttf、KaiGenGothicCN-Bold-Italic.ttf 即可
    将字体文件放入fonts目录中
    

    修改配置
    进入themes目录,修改default-theme.yml文件
    修改以base:font_family属性值对应的字体文件配置:在font:catalog下。

    base:
     font_family: Noto Serif
    
    font:
     catalog:
       Noto Serif:
         normal: KaiGenGothicCN-Regular.ttf
         bold: KaiGenGothicCN-Bold.ttf
         italic: KaiGenGothicCN-Regular-Italic.ttf
         bold_italic: KaiGenGothicCN-Bold-Italic.ttf
    

    因为插件对中文支持不好,解决办法:首先下载中文字库.ttl文件,可在网上下载需要的字体文件。

    找到maven中依赖的插件所在的本地仓库位置:例如我的是在D:\repo\org\asciidoctor\asciidoctorj-pdf\1.5.0-alpha.11。将下载的字体文件,添加到该压缩包中指定位置:asciidoctorj-pdf-1.5.0-alpha.11.jar\gems\asciidoctor-pdf-1.5.0.alpha.11\data\fonts

    修改asciidoctorj-pdf-1.5.0-alpha.11.jar\gems\asciidoctor-pdf-1.5.0.alpha.11\data\themes下的default-theme.yml文件

    修改完成后,在按照生成步骤,重新生成pdf即可。

    参考博客:https://blog.csdn.net/gs_jy/article/details/111287105 https://blog.csdn.net/qq_27621651/article/details/116129152

    相关文章

      网友评论

          本文标题:Swagger2接口文档导出为pdf格式

          本文链接:https://www.haomeiwen.com/subject/xdpnrltx.html