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) {