├── .gitignore
├── .mvn
└── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── LICENSE
├── README.md
├── kbase-doc-alpha
├── lib
│ ├── jacob.jar
│ └── jodconverter-core-3.0-beta-4.jar
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ ├── com
│ │ │ └── eastrobot
│ │ │ │ └── doc
│ │ │ │ ├── KbaseDocAlphaApplication.java
│ │ │ │ ├── config
│ │ │ │ ├── BaseController.java
│ │ │ │ ├── KbsServletContextListener.java
│ │ │ │ ├── OpenOffice.java
│ │ │ │ ├── Swagger2.java
│ │ │ │ ├── SwaggerInterceptor.java
│ │ │ │ ├── SystemConstants.java
│ │ │ │ ├── WebMvcConfig.java
│ │ │ │ └── WebappContext.java
│ │ │ │ ├── dao
│ │ │ │ └── AttachmentRepository.java
│ │ │ │ ├── model
│ │ │ │ └── entity
│ │ │ │ │ └── Attachment.java
│ │ │ │ ├── service
│ │ │ │ ├── ConvertService.java
│ │ │ │ ├── FileService.java
│ │ │ │ ├── WatermarkService.java
│ │ │ │ └── impl
│ │ │ │ │ ├── ConvertServiceImpl.java
│ │ │ │ │ ├── FileServiceImpl.java
│ │ │ │ │ └── WatermarkServiceImpl.java
│ │ │ │ ├── util
│ │ │ │ ├── FileExtensionUtils.java
│ │ │ │ ├── HtmlUtils.java
│ │ │ │ ├── MammothUtils.java
│ │ │ │ ├── OpenOfficeUtils.java
│ │ │ │ └── POIUtils.java
│ │ │ │ ├── watermark
│ │ │ │ ├── AbstractProcessor.java
│ │ │ │ ├── ExcelProcessor.java
│ │ │ │ ├── FontImage.java
│ │ │ │ ├── ImageProcessor.java
│ │ │ │ ├── PdfProcessor.java
│ │ │ │ ├── PowerPointProcessor.java
│ │ │ │ ├── WatermarkException.java
│ │ │ │ ├── WatermarkProcessor.java
│ │ │ │ └── WordProcessor.java
│ │ │ │ └── web
│ │ │ │ └── controller
│ │ │ │ ├── IndexController.java
│ │ │ │ └── WatermarkController.java
│ │ └── org
│ │ │ └── artofsolving
│ │ │ └── jodconverter
│ │ │ └── document
│ │ │ └── DefaultDocumentFormatRegistry.java
│ └── resources
│ │ ├── application.properties
│ │ ├── static
│ │ ├── DATAS
│ │ │ └── README.txt
│ │ ├── css
│ │ │ ├── contents.css
│ │ │ ├── pastefromword.css
│ │ │ └── style.css
│ │ ├── img
│ │ │ ├── edit.png
│ │ │ ├── list.png
│ │ │ ├── read.png
│ │ │ └── upload.png
│ │ └── js
│ │ │ ├── edit.js
│ │ │ ├── index.js
│ │ │ ├── template-web.js
│ │ │ └── upload.js
│ │ └── templates
│ │ ├── body.html
│ │ ├── edit.html
│ │ ├── index.html
│ │ ├── script.html
│ │ └── upload.html
│ └── test
│ └── java
│ └── com
│ └── eastrobot
│ └── doc
│ ├── KbaseDocApplicationTests.java
│ ├── dao
│ └── AttachmentRepositoryTests.java
│ ├── demo
│ └── Tests.java
│ ├── samples
│ ├── BackgroundImage.java
│ ├── WatermarkExcelPicture.java
│ ├── WatermarkExcelTests.java
│ ├── WatermarkPdfTests.java
│ ├── WatermarkPicture.java
│ ├── WatermarkPptTests.java
│ └── WatermarkWordTests.java
│ ├── util
│ ├── AddDimensionedImage.java
│ ├── BaseTests.java
│ ├── ConvertTests.java
│ ├── FormFieldTests.java
│ ├── HtmlUtilsTests.java
│ └── PdfToHtmlTests.java
│ ├── watermark
│ ├── ExcelProcessorTests.java
│ ├── FontImageTests.java
│ ├── ImageProcessorTests.java
│ ├── PdfProcessorTests.java
│ ├── PowerPointProcessorTests.java
│ ├── WatermarkProcessorTests.java
│ └── WordProcessorTests.java
│ └── web
│ └── controller
│ └── IndexControllerTests.java
├── kbase-doc-beta
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── ibothub
│ │ │ └── doc
│ │ │ ├── KbaseDocBetaApplication.java
│ │ │ ├── config
│ │ │ ├── SwaggerConfig.java
│ │ │ └── SystemConstants.java
│ │ │ ├── dao
│ │ │ └── AttachmentRepository.java
│ │ │ ├── entity
│ │ │ └── Attachment.java
│ │ │ ├── service
│ │ │ ├── AttachmentService.java
│ │ │ └── impl
│ │ │ │ └── AttachmentServiceImpl.java
│ │ │ ├── util
│ │ │ └── FileExtensionUtils.java
│ │ │ └── web
│ │ │ └── controller
│ │ │ └── IndexController.java
│ └── resources
│ │ ├── application.properties
│ │ └── static
│ │ └── DATAS
│ │ └── README.txt
│ └── test
│ └── java
│ └── com
│ └── ibothub
│ └── doc
│ └── service
│ └── ConverterTests.java
├── mvnw
├── mvnw.cmd
└── pom.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 |
12 | ### IntelliJ IDEA ###
13 | .idea
14 | *.iws
15 | *.iml
16 | *.ipr
17 |
18 | ### NetBeans ###
19 | nbproject/private/
20 | build/
21 | nbbuild/
22 | dist/
23 | nbdist/
24 | .nb-gradle/
25 | ibothub.db
26 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekoz/kbase-doc/33995dc4dc79d434ebb58255d997c27b5d014492/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 文档在线预览编辑系统
2 |
3 | [](https://996.icu/#/zh_CN)
4 |
5 | > 之前做过在线编辑文档的功能,使用 [webdav](https://www.webdavsystem.com/) 来实现在线编辑,
6 | 存在的问题是编辑页面保存不可控(是否可以保存为版本、是否可以放弃保存等)。如果大家有实现类似功能,希望能提供帮助。
7 |
8 | > 当前应用的主要功能是采用 LibreOffice 和 ckeditor 来实现文档的预览和编辑功能,先介绍操作步骤,再谈下面临的问题。
9 |
10 | ### 操作步骤
11 |
12 | #### 文件列表
13 | 展示当前用户已上传的文件,并提供预览和删除操作
14 |
15 | 
16 |
17 | #### 上传文件
18 | 上传文件时直接利用 [LibreOffice](https://www.libreoffice.org/) 将文件转换成 html并保存
19 |
20 | 
21 |
22 | #### 预览文件
23 | 用户可以在预览界面单击编辑按钮,并实现保存或保存为版本功能
24 |
25 | 
26 |
27 | 
28 |
29 | ### 已知问题
30 | 1. word中包含图片如何处理?目前是用Html正则将图片加上一个 地址 进行加载,这样在保存的时候,html文件的图片地址有异常
31 |
32 | 答:word 中的图片,不在后端进行处理,如果该图片是网络图片,可以进行正常访问吗,如果该图片是本地图片,前端采用js处理
33 |
34 | 2. html 图片的正则未区分网络图片还是本地图片
35 |
36 | 答:见第1点
37 |
38 | 3. 用户修改word中的图片如何处理?
39 |
40 | 答:按照第1点处理后,不存在该问题
41 |
42 | 4. 将html转换成doc后,文件内容格式有误
43 |
44 | 答:html直接转换成docx,采用 LibreOffice 转换,效果略优于 OpenOffice
45 |
46 | 5. windows 操作系统上如何删除一个正在被占用的进程?
47 | 6. 是否能很好的兼容 excel 和 ppt 的预览编辑功能
48 |
49 | 答:暂时不能
50 |
51 | 7. Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed
52 | ```
53 |
54 | com.github.jai-imageio
55 | jai-imageio-core
56 | 1.4.0
57 |
58 |
59 | com.github.jai-imageio
60 | jai-imageio-jpeg2000
61 | 1.3.0
62 |
63 | ```
64 |
65 | ### 总结
66 | 1. visio 文件可采用 LibreOffice 转换成 pdf 实现在线预览,OpenOffice无法实现
67 | 2. LibreOffice 支持转换加密的 office 文件,前提是给出明文密码。详见 [ConvertTests#testEncrypt](kbase-doc-alpha/src/test/java/com/eastrobot/doc/util/ConvertTests.java)
68 | 3. pdf 文件可以调用 pdf2dom 来实现转换 html,从而也可以在线编辑。详见 [PdfToHtmlTests#pdf2html](kbase-doc-alpha/src/test/java/com/eastrobot/doc/util/PdfToHtmlTests.java)
69 | 4. 水印(Watermark)实现方案,本案例中实现了对图片,word,excel,ppt,pdf等格式的水印处理,支持文本水印和图片水印。详见 [WatermarkProcessorTests](kbase-doc-alpha/src/test/java/com/eastrobot/doc/watermark/WatermarkProcessorTests.java)
70 |
71 | ### Restful Apis
72 | [http://localhost:8080/kbase-doc/swagger-ui.html](http://localhost:8080/kbase-doc/swagger-ui.html)
73 |
74 | ### 感谢
75 | [mirkonasato / jodconverter](https://github.com/mirkonasato/jodconverter)
76 |
77 | [sbraconnier/jodconverter](https://github.com/sbraconnier/jodconverter)
78 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/lib/jacob.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekoz/kbase-doc/33995dc4dc79d434ebb58255d997c27b5d014492/kbase-doc-alpha/lib/jacob.jar
--------------------------------------------------------------------------------
/kbase-doc-alpha/lib/jodconverter-core-3.0-beta-4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekoz/kbase-doc/33995dc4dc79d434ebb58255d997c27b5d014492/kbase-doc-alpha/lib/jodconverter-core-3.0-beta-4.jar
--------------------------------------------------------------------------------
/kbase-doc-alpha/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | kbase-doc
7 | com.eastrobot
8 | 0.0.1-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | kbase-doc-alpha
13 |
14 |
15 |
16 | org.apache.poi
17 | poi-ooxml
18 | ${poi.version}
19 |
20 |
21 | org.apache.poi
22 | poi-scratchpad
23 | ${poi.version}
24 |
25 |
26 | fr.opensagres.xdocreport
27 | org.apache.poi.xwpf.converter.xhtml
28 | 1.0.6
29 |
30 |
31 | org.zwobble.mammoth
32 | mammoth
33 | 0.0.4
34 |
35 |
36 |
37 | org.artofsolving.jodconverter
38 | jodconverter-core
39 | 3.0-beta-4
40 | system
41 | ${project.basedir}/lib/jodconverter-core-3.0-beta-4.jar
42 |
43 |
44 | commons-cli
45 | commons-cli
46 | 1.2
47 |
48 |
49 | org.openoffice
50 | juh
51 | 4.1.2
52 |
53 |
54 | org.openoffice
55 | unoil
56 | 4.1.2
57 |
58 |
59 |
60 |
61 | com.googlecode.juniversalchardet
62 | juniversalchardet
63 | 1.0.3
64 |
65 |
66 |
67 | org.apache.httpcomponents
68 | httpclient
69 |
70 |
71 | org.apache.httpcomponents
72 | httpmime
73 |
74 |
75 |
76 | io.springfox
77 | springfox-swagger2
78 | ${swagger.version}
79 |
80 |
81 |
82 | io.springfox
83 | springfox-swagger-ui
84 | ${swagger.version}
85 |
86 |
87 |
88 | net.sf.cssbox
89 | pdf2dom
90 | 1.7
91 |
92 |
93 |
94 | com.itextpdf
95 | itextpdf
96 | 5.5.13.3
97 |
98 |
99 |
100 | org.docx4j
101 | docx4j
102 | 3.3.3
103 |
104 |
105 | log4j
106 | log4j
107 |
108 |
109 | slf4j-log4j12
110 | org.slf4j
111 |
112 |
113 |
114 |
115 |
116 | com.github.jai-imageio
117 | jai-imageio-core
118 | 1.4.0
119 |
120 |
121 | com.github.jai-imageio
122 | jai-imageio-jpeg2000
123 | 1.3.0
124 |
125 |
126 |
127 |
128 | org.springframework.boot
129 | spring-boot-devtools
130 | runtime
131 |
132 |
133 | org.projectlombok
134 | lombok
135 | true
136 |
137 |
138 | org.springframework.boot
139 | spring-boot-starter-test
140 | test
141 |
142 |
143 | org.springframework.restdocs
144 | spring-restdocs-mockmvc
145 | test
146 |
147 |
148 |
149 |
150 |
151 |
152 | org.springframework.boot
153 | spring-boot-maven-plugin
154 |
155 |
156 |
157 |
158 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/src/main/java/com/eastrobot/doc/KbaseDocAlphaApplication.java:
--------------------------------------------------------------------------------
1 | package com.eastrobot.doc;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 | import org.springframework.scheduling.annotation.EnableAsync;
6 |
7 | /**
8 | * @author eko.zhan
9 | */
10 | @SpringBootApplication
11 | @EnableAsync
12 | public class KbaseDocAlphaApplication {
13 |
14 | public static void main(String[] args) {
15 | SpringApplication.run(KbaseDocAlphaApplication.class, args);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/src/main/java/com/eastrobot/doc/config/BaseController.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Power by www.xiaoi.com
3 | */
4 | package com.eastrobot.doc.config;
5 |
6 | import java.io.File;
7 |
8 | import javax.servlet.ServletContext;
9 |
10 | import org.apache.commons.io.FilenameUtils;
11 | import org.artofsolving.jodconverter.OfficeDocumentConverter;
12 | import org.springframework.beans.factory.annotation.Autowired;
13 | import org.springframework.http.MediaType;
14 |
15 | import lombok.extern.slf4j.Slf4j;
16 |
17 |
18 | /**
19 | * @author eko.zhan
20 | * @date 2018年9月2日 下午2:12:10
21 | * @version 1.0
22 | */
23 | @Slf4j
24 | public class BaseController {
25 |
26 | @Autowired
27 | protected ServletContext servletContext;
28 |
29 | /**
30 | * 转换文件
31 | * @author eko.zhan at 2018年9月2日 下午2:16:14
32 | * @param originFile
33 | * @param targetFile
34 | */
35 | protected void convert(File originFile, File targetFile) {
36 | WebappContext webappContext = WebappContext.get(servletContext);
37 | OfficeDocumentConverter converter = webappContext.getDocumentConverter();
38 | try {
39 | long startTime = System.currentTimeMillis();
40 | converter.convert(originFile, targetFile);
41 | long conversionTime = System.currentTimeMillis() - startTime;
42 | log.info(String.format("successful conversion: %s [%db] to %s in %dms", FilenameUtils.getExtension(originFile.getName()), originFile.length(), FilenameUtils.getExtension(targetFile.getName()), conversionTime));
43 | } catch (Exception e) {
44 | e.printStackTrace();
45 | log.error(String.format("failed conversion: %s [%db] to %s; %s; input file: %s", FilenameUtils.getExtension(originFile.getName()), originFile.length(), FilenameUtils.getExtension(targetFile.getName()), e, targetFile.getName()));
46 | }
47 | }
48 |
49 | /**
50 | * 根据指定的文件名称获取文件类型
51 | * @author eko.zhan at 2018年9月2日 下午3:12:57
52 | * @param filename
53 | * @return
54 | */
55 | protected MediaType getMediaType(String filename) {
56 | // application/pdf
57 | // application/xml
58 | // image/gif, ...
59 | String mineType = servletContext.getMimeType(filename);
60 | try {
61 | MediaType mediaType = MediaType.parseMediaType(mineType);
62 | return mediaType;
63 | } catch (Exception e) {
64 | return MediaType.APPLICATION_OCTET_STREAM;
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/src/main/java/com/eastrobot/doc/config/KbsServletContextListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Power by www.xiaoi.com
3 | */
4 | package com.eastrobot.doc.config;
5 |
6 | import javax.servlet.ServletContextEvent;
7 | import javax.servlet.ServletContextListener;
8 |
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.context.annotation.Configuration;
11 |
12 | /**
13 | * @author eko.zhan
14 | * @date 2017年8月8日 下午8:32:46
15 | * @version 1.0
16 | */
17 | @Configuration
18 | public class KbsServletContextListener implements ServletContextListener {
19 |
20 | @Autowired
21 | private OpenOffice openOffice;
22 |
23 | @Override
24 | public void contextInitialized(ServletContextEvent event) {
25 | WebappContext.init(event.getServletContext(), openOffice);
26 | }
27 |
28 | @Override
29 | public void contextDestroyed(ServletContextEvent event) {
30 | WebappContext.destroy(event.getServletContext());
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/src/main/java/com/eastrobot/doc/config/OpenOffice.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Power by www.xiaoi.com
3 | */
4 | package com.eastrobot.doc.config;
5 |
6 | import lombok.Getter;
7 | import lombok.Setter;
8 |
9 | import org.springframework.beans.factory.annotation.Value;
10 | import org.springframework.stereotype.Component;
11 |
12 | /**
13 | * @author eko.zhan
14 | * @date 2017年8月9日 上午9:30:15
15 | * @version 1.0
16 | */
17 | @Component
18 | @Getter
19 | @Setter
20 | public class OpenOffice {
21 |
22 | @Value("${office.port}")
23 | private String port;
24 | @Value("${office.home}")
25 | private String home;
26 | @Value("${office.profile}")
27 | private String profile;
28 | @Value("${office.fileSizeMax}")
29 | private String fileSizeMax;
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/src/main/java/com/eastrobot/doc/config/Swagger2.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Power by www.xiaoi.com
3 | */
4 | package com.eastrobot.doc.config;
5 |
6 | import org.springframework.context.annotation.Bean;
7 | import org.springframework.context.annotation.Configuration;
8 |
9 | import springfox.documentation.builders.ApiInfoBuilder;
10 | import springfox.documentation.builders.PathSelectors;
11 | import springfox.documentation.builders.RequestHandlerSelectors;
12 | import springfox.documentation.service.*;
13 | import springfox.documentation.spi.DocumentationType;
14 | import springfox.documentation.spi.service.contexts.SecurityContext;
15 | import springfox.documentation.spring.web.plugins.Docket;
16 | import springfox.documentation.swagger2.annotations.EnableSwagger2;
17 |
18 | import java.util.List;
19 |
20 | import static com.google.common.collect.Lists.newArrayList;
21 |
22 | /**
23 | * @author eko.zhan
24 | * @date 2017年12月2日 上午11:39:23
25 | * @version 1.0
26 | */
27 | @Configuration
28 | @EnableSwagger2
29 | public class Swagger2 {
30 |
31 | @Bean
32 | public Docket createRestApi() {
33 | return new Docket(DocumentationType.SWAGGER_2)
34 | .apiInfo(apiInfo())
35 | .securitySchemes(securitySchemes())
36 | .securityContexts(securityContexts())
37 | .select()
38 | .apis(RequestHandlerSelectors.basePackage("com.eastrobot.doc.web"))
39 | .paths(PathSelectors.any())
40 | .build();
41 | }
42 |
43 | private List securitySchemes() {
44 | return newArrayList(new ApiKey(SystemConstants.API_KEY, SystemConstants.API_TOKEN, SystemConstants.API_PASSAS));
45 | }
46 |
47 | private List securityContexts() {
48 | return newArrayList(
49 | SecurityContext.builder()
50 | .securityReferences(defaultAuth())
51 | .forPaths(PathSelectors.any())
52 | .build()
53 | );
54 | }
55 |
56 | private List defaultAuth() {
57 | AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
58 | AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
59 | authorizationScopes[0] = authorizationScope;
60 | return newArrayList(new SecurityReference(SystemConstants.API_KEY, authorizationScopes));
61 | }
62 |
63 | private ApiInfo apiInfo() {
64 | return new ApiInfoBuilder()
65 | .title("Spring Boot 中使用 Swagger2 构建 RESTful APIs ")
66 | .description("")
67 | .termsOfServiceUrl("http://ekozhan.com/kbase-doc/")
68 | .contact(new Contact("ekozhan", "http://ekozhan.com/", "eko.z@outlook.com"))
69 | .version("1.0")
70 | .build();
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/src/main/java/com/eastrobot/doc/config/SwaggerInterceptor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Power by www.xiaoi.com
3 | */
4 | package com.eastrobot.doc.config;
5 |
6 | import org.apache.commons.lang3.StringUtils;
7 | import org.springframework.beans.factory.annotation.Value;
8 | import org.springframework.http.HttpStatus;
9 | import org.springframework.stereotype.Component;
10 | import org.springframework.web.servlet.HandlerInterceptor;
11 | import org.springframework.web.servlet.ModelAndView;
12 |
13 | import javax.servlet.http.HttpServletRequest;
14 | import javax.servlet.http.HttpServletResponse;
15 | import java.util.Objects;
16 |
17 | /**
18 | * @author eko.zhan
19 | * @version 1.0
20 | * @date 2019/3/12 10:25
21 | */
22 | @Component
23 | public class SwaggerInterceptor implements HandlerInterceptor {
24 |
25 | @Value("${api.token}")
26 | private String token;
27 |
28 | @Override
29 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
30 | String requestURI = request.getRequestURI();
31 | if (!StringUtils.isEmpty(requestURI)) {
32 | String apiToken = request.getHeader(SystemConstants.API_TOKEN);
33 | if (StringUtils.isEmpty(apiToken) || !Objects.equals(token, apiToken)) {
34 | response.setStatus(HttpStatus.UNAUTHORIZED.value());
35 | return false;
36 | }
37 | }
38 | return true;
39 | }
40 |
41 | @Override
42 | public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
43 |
44 | }
45 |
46 | @Override
47 | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
48 |
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/kbase-doc-alpha/src/main/java/com/eastrobot/doc/config/SystemConstants.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Power by www.xiaoi.com
3 | */
4 | package com.eastrobot.doc.config;
5 |
6 | import com.google.common.collect.Maps;
7 |
8 | import java.util.Map;
9 |
10 | /**
11 | * @author eko.zhan
12 | * @date 2017年12月6日 下午4:26:58
13 | * @version 1.0
14 | */
15 | public class SystemConstants {
16 |
17 | public static String HTML_HEADER = "";
18 |
19 | public static String HTML_FOOTER = "