From d03a1fa746407a6926f308c7b75e2021747c320a Mon Sep 17 00:00:00 2001
From: Sh1yu <41428433@qq.com>
Date: Tue, 20 Jun 2023 16:33:47 +0800
Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E9=97=AD=E6=BA=90=E7=89=88?=
=?UTF-8?q?=E5=AF=B9=E4=BA=8E=E7=94=9F=E6=88=90doc=E7=9A=84=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
zyplayer-doc-wiki/pom.xml | 237 +++++++++---------
.../wiki/controller/WikiPageController.java | 36 ++-
2 files changed, 139 insertions(+), 134 deletions(-)
diff --git a/zyplayer-doc-wiki/pom.xml b/zyplayer-doc-wiki/pom.xml
index ef8cce89..2d6f7bed 100644
--- a/zyplayer-doc-wiki/pom.xml
+++ b/zyplayer-doc-wiki/pom.xml
@@ -1,133 +1,124 @@
- 4.0.0
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
- zyplayer-doc-wiki
- jar
- zyplayer-doc-wiki
- wiki文档工具
- https://gitee.com/zyplayer/zyplayer-doc/zyplayer-doc-wiki
-
-
- zyplayer
- 暮光:城中城
- 806783409@qq.com
-
- Java Development Engineer
-
- 2018-05-22 16:06:06
-
-
+ zyplayer-doc-wiki
+ jar
+ zyplayer-doc-wiki
+ wiki文档工具
+ https://gitee.com/zyplayer/zyplayer-doc/zyplayer-doc-wiki
+
+
+ zyplayer
+ 暮光:城中城
+ 806783409@qq.com
+
+ Java Development Engineer
+
+ 2018-05-22 16:06:06
+
+
-
- com.zyplayer
- zyplayer-doc
- 1.1.5
-
+
+ com.zyplayer
+ zyplayer-doc
+ 1.1.5
+
-
- UTF-8
- UTF-8
- 1.8
-
+
+ UTF-8
+ UTF-8
+ 1.8
+
-
-
- org.springframework.boot
- spring-boot-starter
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- com.zyplayer
- zyplayer-doc-data
-
-
- com.zyplayer
- zyplayer-doc-core
-
-
- org.apache.poi
- poi
- 4.1.0
-
-
- org.apache.poi
- poi-ooxml
- 4.1.0
-
-
- org.apache.poi
- poi-ooxml-schemas
- 4.1.0
-
-
- org.apache.poi
- poi-scratchpad
- 4.1.0
-
-
- org.apache.poi
- ooxml-schemas
- 1.4
-
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.zyplayer
+ zyplayer-doc-data
+
+
+ com.zyplayer
+ zyplayer-doc-core
+
-
- com.atlassian.commonmark
- commonmark
- 0.10.0
-
-
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
-
-
-
- scm:git@git.oschina.net:zyplayer/zyplayer-doc.git
- scm:git@git.oschina.net:zyplayer/zyplayer-doc.git
- git@git.oschina.net:zyplayer/zyplayer-doc.git
-
+
+
+ org.docx4j
+ docx4j-core
+ 8.3.9
+
+
+ org.docx4j
+ docx4j-JAXB-ReferenceImpl
+ 8.3.9
+
+
+ org.docx4j
+ docx4j-ImportXHTML
+ 8.3.8
+
+
+ com.atlassian.commonmark
+ commonmark
+ 0.10.0
+
+
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+
+
+
+ scm:git@git.oschina.net:zyplayer/zyplayer-doc.git
+ scm:git@git.oschina.net:zyplayer/zyplayer-doc.git
+ git@git.oschina.net:zyplayer/zyplayer-doc.git
+
-
-
- snapshots
- https://oss.sonatype.org/content/repositories/snapshots/
-
-
- snapshots
- https://oss.sonatype.org/service/local/staging/deploy/maven2/
-
-
+
+
+ snapshots
+ https://oss.sonatype.org/content/repositories/snapshots/
+
+
+ snapshots
+ https://oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
-
-
-
- src/main/resources/dist
- META-INF/resources/
-
-
- src/main/java
-
- **/*
-
-
- **/*.java
-
- false
-
-
- src/main/webapp
-
- **/*
-
- false
-
-
-
+
+
+
+ src/main/resources/dist
+ META-INF/resources/
+
+
+ src/main/java
+
+ **/*
+
+
+ **/*.java
+
+ false
+
+
+ src/main/webapp
+
+ **/*
+
+ false
+
+
+
diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java
index f8837dc6..75dd3c42 100644
--- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java
+++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java
@@ -27,8 +27,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.poifs.filesystem.DirectoryEntry;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.docx4j.XmlUtils;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.docx4j.openpackaging.parts.WordprocessingML.AltChunkType;
+import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -37,6 +39,7 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
@@ -337,18 +340,29 @@ public class WikiPageController {
return DocResponseJson.warn("文档内容为空,不能导出!");
}
try {
- ByteArrayInputStream bais = new ByteArrayInputStream(pageContent.getContent().getBytes("GBK"));
- POIFSFileSystem poifs = new POIFSFileSystem();
- DirectoryEntry directory = poifs.getRoot();
- directory.createDocument("WordDocument", bais);
- // 写入流
- response.setContentType("application/vnd.ms-excel");
- response.setCharacterEncoding("utf-8");
+ String content = pageContent.getContent();
String fileName = URLEncoder.encode(wikiPageSel.getName(), "UTF-8");
+ content = "\n" +
+ "\n" +
+ "
\n" +
+ "\n" +
+ "" + fileName + "\n" +
+ "\n" +
+ "" +
+ content +
+ "\n" +
+ "";
+ // 写入流
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
ServletOutputStream outputStream = response.getOutputStream();
- poifs.writeFilesystem(outputStream);
- bais.close();
+ WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
+ MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
+ mdp.addAltChunk(AltChunkType.Xhtml, content.getBytes(StandardCharsets.UTF_8));
+ mdp.convertAltChunks();
+ XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true);
+ wordMLPackage.save(outputStream);
outputStream.close();
return DocResponseJson.ok();
} catch (Exception e) {