java word文档 转 html文件

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 一、简介   一般word文件后缀有doc、docx两种。docx是office word 2007以及以后版本文档的扩展名;doc是office word 2003文档保存的扩展名。对于这两种格式的word转换成html需要使用不同的方法。

一、简介
  一般word文件后缀有doc、docx两种。docx是office word 2007以及以后版本文档的扩展名;doc是office word 2003文档保存的扩展名。对于这两种格式的word转换成html需要使用不同的方法。
对于docx格式的文档使用xdocreport进行转换。依赖如下:

<dependency>
    <groupId>fr.opensagres.xdocreport</groupId>
    <artifactId>fr.opensagres.xdocreport.document</artifactId>
    <version>1.0.5</version>
</dependency>
<dependency>  
    <groupId>fr.opensagres.xdocreport</groupId>  
    <artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId>  
    <version>1.0.5</version>  
</dependency>

对于docx格式的文档使用poi进行转换。依赖如下:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.12</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.12</version>
</dependency>

二:示例
  代码示例如下:

  1 package com.test.word;
  2 
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileNotFoundException;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.io.InputStream;
  9 import java.io.OutputStream;
 10 
 11 import javax.xml.parsers.DocumentBuilderFactory;
 12 import javax.xml.parsers.ParserConfigurationException;
 13 import javax.xml.transform.OutputKeys;
 14 import javax.xml.transform.Transformer;
 15 import javax.xml.transform.TransformerException;
 16 import javax.xml.transform.TransformerFactory;
 17 import javax.xml.transform.dom.DOMSource;
 18 import javax.xml.transform.stream.StreamResult;
 19 
 20 import org.apache.poi.hwpf.HWPFDocument;
 21 import org.apache.poi.hwpf.converter.PicturesManager;
 22 import org.apache.poi.hwpf.converter.WordToHtmlConverter;
 23 import org.apache.poi.hwpf.usermodel.PictureType;
 24 import org.apache.poi.xwpf.converter.core.FileImageExtractor;
 25 import org.apache.poi.xwpf.converter.core.FileURIResolver;
 26 import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
 27 import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
 28 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 29 import org.junit.Test;
 30 import org.w3c.dom.Document;
 31 
 32 /**
 33  * word 转换成html
 34  */
 35 public class WordToHtml {
 36     
 37     /**
 38      * 2007版本word转换成html
 39      * @throws IOException
 40      */
 41     @Test 
 42     public void Word2007ToHtml() throws IOException {
 43         String filepath = "C:/test/";
 44         String fileName = "滕王阁序2007.docx";
 45         String htmlName = "滕王阁序2007.html";
 46         final String file = filepath + fileName;
 47         File f = new File(file);  
 48         if (!f.exists()) {  
 49             System.out.println("Sorry File does not Exists!");  
 50         } else {  
 51             if (f.getName().endsWith(".docx") || f.getName().endsWith(".DOCX")) {  
 52                   
 53                 // 1) 加载word文档生成 XWPFDocument对象  
 54                 InputStream in = new FileInputStream(f);  
 55                 XWPFDocument document = new XWPFDocument(in);  
 56   
 57                 // 2) 解析 XHTML配置 (这里设置IURIResolver来设置图片存放的目录)  
 58                 File imageFolderFile = new File(filepath);  
 59                 XHTMLOptions options = XHTMLOptions.create().URIResolver(new FileURIResolver(imageFolderFile));  
 60                 options.setExtractor(new FileImageExtractor(imageFolderFile));  
 61                 options.setIgnoreStylesIfUnused(false);  
 62                 options.setFragment(true);  
 63                   
 64                 // 3) 将 XWPFDocument转换成XHTML  
 65                 OutputStream out = new FileOutputStream(new File(filepath + htmlName));  
 66                 XHTMLConverter.getInstance().convert(document, out, options);  
 67                 
 68                 //也可以使用字符数组流获取解析的内容
 69 //                ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
 70 //                XHTMLConverter.getInstance().convert(document, baos, options);  
 71 //                String content = baos.toString();
 72 //                System.out.println(content);
 73 //                 baos.close();
 74             } else {  
 75                 System.out.println("Enter only MS Office 2007+ files");  
 76             }  
 77         }  
 78     }  
 79     
 80     /**
 81      * /**
 82      * 2003版本word转换成html
 83      * @throws IOException
 84      * @throws TransformerException
 85      * @throws ParserConfigurationException
 86      */
 87     @Test 
 88     public void Word2003ToHtml() throws IOException, TransformerException, ParserConfigurationException {
 89         String filepath = "C:/test/";
 90         final String imagepath = "C:/test/image/";
 91         String fileName = "滕王阁序2003.doc";
 92         String htmlName = "滕王阁序2003.html";
 93         final String file = filepath + fileName;
 94         InputStream input = new FileInputStream(new File(file));
 95         HWPFDocument wordDocument = new HWPFDocument(input);
 96         WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
 97         //设置图片存放的位置
 98         wordToHtmlConverter.setPicturesManager(new PicturesManager() {
 99             public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches) {
100                 File imgPath = new File(imagepath);
101                 if(!imgPath.exists()){//图片目录不存在则创建
102                     imgPath.mkdirs();
103                 }
104                 File file = new File(imagepath + suggestedName);
105                 try {
106                     OutputStream os = new FileOutputStream(file);
107                     os.write(content);
108                     os.close();
109                 } catch (FileNotFoundException e) {
110                     e.printStackTrace();
111                 } catch (IOException e) {
112                     e.printStackTrace();
113                 }
114                 return imagepath + suggestedName;
115             }
116         });
117         
118         //解析word文档
119         wordToHtmlConverter.processDocument(wordDocument);
120         Document htmlDocument = wordToHtmlConverter.getDocument();
121         
122         File htmlFile = new File(filepath + htmlName);
123         OutputStream outStream = new FileOutputStream(htmlFile);
124         
125         //也可以使用字符数组流获取解析的内容
126 //        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
127 //        OutputStream outStream = new BufferedOutputStream(baos);
128 
129         DOMSource domSource = new DOMSource(htmlDocument);
130         StreamResult streamResult = new StreamResult(outStream);
131 
132         TransformerFactory factory = TransformerFactory.newInstance();
133         Transformer serializer = factory.newTransformer();
134         serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
135         serializer.setOutputProperty(OutputKeys.INDENT, "yes");
136         serializer.setOutputProperty(OutputKeys.METHOD, "html");
137         
138         serializer.transform(domSource, streamResult);
139 
140         //也可以使用字符数组流获取解析的内容
141 //        String content = baos.toString();
142 //        System.out.println(content);
143 //        baos.close();
144         outStream.close();
145     }
146 }

  运行生存文件结果如下:

  

   

目录
相关文章
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
77 9
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
85 2
|
2月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
142 5
|
1天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
31 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
22天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
82 34
|
2月前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
47 5
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
43 3
|
2月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
2月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
112 2
|
2月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
64 4