## 1.导入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
org.apache.poi poi-ooxml 4.1.2 ## 具体实现
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.jsoup.Jsoup;
public static void main(String[] args) throws Exception {
try {
String content="<table style=\"width: auto;\"><tbody><tr><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"><span style=\"background-color: rgb(114, 192, 64);\">ds</span><span style=\"background-color: rgb(114, 192, 64);\"><em>ddasd</em></span><span style=\"background-color: rgb(114, 192, 64);\">dssdsadaddadsddasd </span></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr></tbody></table><p><br></p>";
content="<p><br></p><p>正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容</p><p><br></p><p><img src=\"https://ducc-test.s3.bj.bcebos.com/console/edc3525d205b4bf4ad72d63341330fbc/common/429c7cc3c5f4158d6829d825ec9224bf_1698043603594.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20231023T064643Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=ALTAKOWNDudifXl0Jbqyl4VdR8%2F20231023%2Fbj%2Fs3%2Faws4_request&X-Amz-Signature=d460be37c5c4de7b9588708b2e972599693ba2db67f01a9016f9324be82da276\" alt=\"\" data-href=\"\" width=\"200\" height=\"300\"\"/></p>";
content="<p>【通用-产品破损】产品包装/产品外观有瑕疵处理方案</p><p><br></p><p style=\"text-align: start;\">本页目录</p><p style=\"text-align: start;\">•名词解释</p><p style=\"text-align: start;\">•处理思路</p><p style=\"text-align: start;\">•处理流程</p><p style=\"text-align: start;\">•升级工单参考模板</p><p style=\"text-align: start;\"> </p><p style=\"text-align: start;\"> </p><h1 style=\"text-align: left;\">名词解释 </h1><p style=\"text-align: start;\"> <a href=\"https://www.baidu.com\" target=\"_blank\">百度</a></p><p style=\"text-align: start;\">•物流损:物流包装有明显破损、撞击、变形、受潮、浸液等情形称为物流损。如果是物流包装或者产品包装有损,那大概率是物流问题,需要先反馈物流核实,不能以物流包装问题申请无理由退货或换货</p><p style=\"text-align: start;\">•开箱损:物流包装及产品彩盒包装无明显的破损,但是产品本身有破损或者少附件</p><p style=\"text-align: start;\"> </p><h1 style=\"text-align: left;\">处理思路</h1><p style=\"text-align: start;\"> </p><p style=\"text-align: start;\"> </p><p style=\"text-align: start;\">•从物流包装、产品包装、签收时间纬度判断,一般用户签收了商品有问题都会第一时间联系客服或者快递,超出物流显示的签收时间24小时以上的客服需着重留意,通常情况,因运输包装损坏,且未当面验货就自行签收,造成的损失,用户需要承担主要或全部责任;物流问题首先建议用户拒收</p><p style=\"text-align: start;\">•如果物流包装和产品包装都没有问题,产品有瑕疵那可能是出厂造成的或者用户人为造成的</p><p style=\"text-align: start;\">•针对物流损或者开箱损,凭证要齐全,反馈了什么问题那需要提供对应问题的凭证</p><p style=\"text-align: start;\">•非物流原因的产品瑕疵问题签收24小时内反馈的一线有直接处理权,超过24小时的或一线无法准确判断的可升级非技术工单反馈</p><p style=\"text-align: start;\">•产品有明显破损、撞击、变形、受潮、浸液等情形的,比如屏幕碎,不要建议用户去激活使用产品体验</p><p style=\"text-align: start;\">•空包裹/发错货提供凭证升级非技术工单核实(颜色发错品类发错的涉及SN的产品,也需要提供收到的设备SN码)</p><p style=\"text-align: start;\"> <a href=\"https://ducc.baidu-int.com/void(0);\" target=\"_self\">返回目录</a> </p><h1 style=\"text-align: left;\">处理流程</h1><p style=\"text-align: start;\"> </p><p style=\"text-align: start;\">用户进线表示收到的产品物流包装/产品包装/产品外观有破损时,客服按以下方式处理:</p><p style=\"text-align: start;\"> <span style=\"color: transparent;\"> </span> </p><p><img src=\"https://ducc-test.s3.bj.bcebos.com/console/edc3525d205b4bf4ad72d63341330fbc/common/2175af10d60884178cf04ea70ddaad72_1698031242022.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20231023T032042Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=ALTAKOWNDudifXl0Jbqyl4VdR8%2F20231023%2Fbj%2Fs3%2Faws4_request&X-Amz-Signature=f8daa9be232204be9178e5efad97a802a6e83d5bff556d9c7ba9ba6ff95a7e8b\" alt=\"\" data-href=\"\" style=\"\"/></p><p style=\"text-align: start;\"> </p><p style=\"text-align: start;\"> <a href=\"https://ducc.baidu-int.com/void(0);\" target=\"_self\">返回目录</a> </p><h1 style=\"text-align: left;\">升级工单参考模板</h1><p>•开箱损:</p><p style=\"text-align: start;\"><span style=\"background-color: rgb(255, 251, 143);\"><strong>签收24小时内可直接引导用户在订单内申请退货/换货</strong></span><strong>:</strong> 凭证:物流和产品包装清晰的包装6面照片、反应产品问题的图片</p><p style=\"text-align: start;\"> </p><p style=\"text-align: start;\"><strong>签收超24小时内反馈二线处理:</strong></p><p style=\"text-align: start;\">用户进线表示自己收到的设备脏/屏幕碎/有划痕/,经查询订单是XX时间签收的,物流包装和产品包装完好,产品签收已超过24小时,未激活/激活时间在24小时内,已告知用户反馈核实,未做承诺(用户的其他诉求如有如实记录),请二线处理并告知用户处理方案</p><p style=\"text-align: start;\">订单号: 凭证:物流和产品包装清晰的包装6面照片、反应产品问题的图片</p><p style=\"text-align: start;\"> </p><p style=\"text-align: start;\">•物流损:</p><p style=\"text-align: start;\"><span style=\"background-color: rgb(252, 251, 207);\"><strong>签收24小时内</strong></span><strong>:</strong></p><p style=\"text-align: start;\">用户进线表示自己收到的商品有问题,物流包装/产品包装/产品有破损,物流已无法拒收/用户拒绝联系快递……物流签收在24小时内,烦请二线协助反馈物流核实处理: 订单号:</p><p style=\"text-align: start;\">物流单号: 凭证:物流和产品包装清晰的包装6面照片、反应产品问题的图片(如有)</p><p style=\"text-align: start;\"> </p><div data-w-e-type=\"video\" data-w-e-is-void><video poster=\"\" controls=\"true\" width=\"auto\" height=\"auto\"><source src=\"https://ducc-test.s3.bj.bcebos.com/console/edc3525d205b4bf4ad72d63341330fbc/common/421b47ffd946ca083b65cd668c6b17e6_1698031414178.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20231023T032334Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86399&X-Amz-Credential=ALTAKOWNDudifXl0Jbqyl4VdR8%2F20231023%2Fbj%2Fs3%2Faws4_request&X-Amz-Signature=c5f6921fc9eabbfbd1e2954bbbab83a88be8036056b6359aa78070dbbd2a5e6c\" type=\"video/mp4\"/></video></div><p style=\"text-align: start;\"><span style=\"background-color: rgb(255, 236, 61);\"><strong>签收超24小时</strong></span><strong>:</strong></p><p style=\"text-align: start;\">用户进线表示自己收到的商品有问题,物流包装/产品包装/产品有破损,物流已无法拒收/用户拒绝联系快递,物流签收已超24小时,已告知用户申请售后退货/换货,以售后检查结果为准,特此报备:</p><p style=\"text-align: start;\">订单号:</p><p style=\"text-align: start;\">物流单号: 凭证:物流和产品包装清晰的包装6面照片、反应产品问题的图片(如有)</p><p style=\"text-align: start;\"> </p><div data-w-e-type=\"attachment\" class=\"w-e-textarea-sui-attach-container\" data-w-e-is-void data-fileName=\"嵌入页面.docx\" data-iconImgSrc=\"https://img.sobot.com/console/common/icon/word.png\" data-size=\"54.30Kb\" data-link=\"https://ducc-test.s3.bj.bcebos.com/console/edc3525d205b4bf4ad72d63341330fbc/common/8b177644b210af08be73b6a713f90abd_1698031335917.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20231023T032216Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=ALTAKOWNDudifXl0Jbqyl4VdR8%2F20231023%2Fbj%2Fs3%2Faws4_request&X-Amz-Signature=59ec6f234b2535422c560c602b959978255c1931f466deb4d9816e7ea267b26e\" style=\"width: 240px; height: 70px; border-radius: 4px; border: 1px solid rgb(208, 208, 208); padding: 15px; display: flex; align-items: center; text-decoration: none;background-color:#fff;\"> <a href=\"https://ducc-test.s3.bj.bcebos.com/console/edc3525d205b4bf4ad72d63341330fbc/common/8b177644b210af08be73b6a713f90abd_1698031335917.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20231023T032216Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=ALTAKOWNDudifXl0Jbqyl4VdR8%2F20231023%2Fbj%2Fs3%2Faws4_request&X-Amz-Signature=59ec6f234b2535422c560c602b959978255c1931f466deb4d9816e7ea267b26e\" target=\"_blank\" style=\"display:flex;text-decoration:none;align-items:center;\"> <div class=\"w-e-textarea-attach-card-icon-container\" style=\"width:48px;\"> <img src=\"https://img.sobot.com/console/common/icon/word.png\" style=\" height: 40px; margin-right: 10px;\" /> </div> <div class=\"w-e-textarea-attach-card-fileName-container\" style=\"display: flex; flex-direction: column;\"> <span style=\"color: rgb(22, 22, 22); overflow: hidden; word-break: break-all; white-space: nowrap; text-overflow: ellipsis; width: 164px;\"> 嵌入页面.docx </span> <span style=\"font-size:12px;margin-top:7px;color: rgb(163, 165, 168); overflow: hidden; word-break: break-all; white-space: nowrap; text-overflow: ellipsis; width: 164px;\"> 54.30Kb </span> </div> </a> </div><p style=\"text-align: start;\">•发错货/空包裹:</p><p style=\"text-align: start;\">用户进线表示自己买的是XXXX,收到的是XXXX/用户进线表示买了XXX台,只收到XXXX台,请二线核实处理订单号: 快递单号:</p><p style=\"text-align: start;\"><br></p><table style=\"width: auto;\"><tbody><tr><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th><th colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></th></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\">111111111111</td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\">111111111111</td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\">1111111111111111111</td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td></tr><tr><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\"></td><td colSpan=\"1\" rowSpan=\"1\" width=\"auto\">11111111111111</td></tr></tbody></table><p><br></p>";
String htmlContent = "<html><head><meta charset=\"UTF-8\"><style>table th,td { border: 1px solid #ccc;min-width: 50px;height: 20px;} img {width: 200px;height: 300px;} body,table,div {width:100%;height: 100%} html {width:100%;height: 100%}</style></head><body>" +content+ "</body></html>";
htmlContent=htmlContent.replace("\"","'");
System.out.println(htmlContent);
toWord(htmlContent);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void toWord(String html){
try {
byte by[] = html.getBytes("UTF-8");
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(by);
POIFSFileSystem poifsFileSystem = new POIFSFileSystem();
DirectoryEntry directoryEntry = poifsFileSystem.getRoot();
directoryEntry.createDocument("WordDocument", byteArrayInputStream);
String sqlFilePath = "D:" + File.separator + "patrolReport" + File.separator + "temp_" + UUID.randomUUID();
File directory = new File(sqlFilePath);
if (!directory.exists()) {
directory.mkdirs();
}
String fileUrl = sqlFilePath + File.separator + "主机巡检报告告警内容详情.doc";
FileOutputStream outputStream = new FileOutputStream(fileUrl);
poifsFileSystem.writeFilesystem(outputStream);
byteArrayInputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}