专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Word转html

57_1.png

前言

最近做的一个项目有个word导入的功能,一开始做的是导入纯文本,然后显示在前端页面,客户提出了建议,能不能改成和word文件里面格式一样的。

推荐

1、poi

2、open office

3、libreoffice

poi

pom.xml

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.14</version>
</dependency>
 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>xdocreport</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>ooxml-schemas</artifactId> <version>1.3</version> </dependency> 

word读取

/**
 * 将word2003转换为html文件
 *
 * @param wordPath word文件路径
 * @param wordName word文件名称无后缀 * @param suffix word文件后缀 * @param htmlPath html存储地址 * @throws IOException * @throws TransformerException * @throws ParserConfigurationException */ public static String Word2003ToHtml(String wordPath, String wordName, String suffix, String htmlPath) throws IOException, TransformerException, ParserConfigurationException { String htmlName = wordName + ".html"; final String imagePath = htmlPath + "image" + File.separator; // 判断html文件是否存在 File htmlFile = new File(htmlPath + htmlName); if (htmlFile.exists()) { return htmlFile.getAbsolutePath(); } // 原word文档 final String file = wordPath + File.separator + wordName + suffix; InputStream input = new FileInputStream(new File(file)); HWPFDocument wordDocument = new HWPFDocument(input); WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter( DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()); // 设置图片存放的位置 wordToHtmlConverter.setPicturesManager(new PicturesManager() { public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches) { File imgPath = new File(imagePath); // 图片目录不存在则创建 if (!imgPath.exists()) { imgPath.mkdirs(); } File file = new File(imagePath + suggestedName); try { OutputStream os = new FileOutputStream(file); os.write(content); os.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 图片在html文件上的路径 相对路径 return "image/" + suggestedName; } }); // 解析word文档 wordToHtmlConverter.processDocument(wordDocument); Document htmlDocument = wordToHtmlConverter.getDocument(); // 生成html文件上级文件夹 File folder = new File(htmlPath); if (!folder.exists()) { folder.mkdirs(); } OutputStream outStream = new FileOutputStream(htmlFile); DOMSource domSource = new DOMSource(htmlDocument); StreamResult streamResult = new StreamResult(outStream); TransformerFactory factory = TransformerFactory.newInstance(); Transformer serializer = factory.newTransformer(); serializer.setOutputProperty(OutputKeys.ENCODING, "GB2312"); serializer.setOutputProperty(OutputKeys.INDENT, "yes"); serializer.setOutputProperty(OutputKeys.METHOD, "html"); serializer.transform(domSource, streamResult); return htmlFile.getAbsolutePath(); } /** * * 2007版本word转换成html * * @param wordPath word文件路径 * @param wordName word文件名称无后缀 * @param suffix word文件后缀 * @param htmlPath html存储地址 * @return * @throws IOException */ public static String word2007ToHtml(String wordPath, String wordName, String suffix, String htmlPath) throws IOException { String htmlName = wordName + ".html"; String imagePath = htmlPath + "image" + File.separator; // 判断html文件是否存在 File htmlFile = new File(htmlPath + htmlName); if (htmlFile.exists()) { return htmlFile.getAbsolutePath(); } // word文件 File wordFile = new File(wordPath + File.separator + wordName + suffix); // 1) 加载word文档生成 XWPFDocument对象 InputStream in = new FileInputStream(wordFile); XWPFDocument document = new XWPFDocument(in); // 2) 解析 XHTML配置 (这里设置IURIResolver来设置图片存放的目录) File imgFolder = new File(imagePath); XHTMLOptions options = XHTMLOptions.create(); options.setExtractor(new FileImageExtractor(imgFolder)); // html中图片的路径 相对路径 options.URIResolver(new BasicURIResolver("image")); options.setIgnoreStylesIfUnused(false); options.setFragment(true); // 3) 将 XWPFDocument转换成XHTML // 生成html文件上级文件夹 File folder = new File(htmlPath); if (!folder.exists()) { folder.mkdirs(); } OutputStream out = new FileOutputStream(htmlFile); XHTMLConverter.getInstance().convert(document, out, options); return htmlFile.getAbsolutePath(); } 

open office

安装,下载地址:www.openoffice.org/download/in… 57_2.png

下载Jodconverter www.artofsolving.com/opensource/… 这是一个开启OpenOffice进行格式转化的第三方jar包。

linux 一键安装脚本

cd /tmp

install_redhat() {
    wget https://kkfileview.keking.cn/Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz -cO openoffice_rpm.tar.gz && tar zxf /tmp/openoffice_rpm.tar.gz && cd /tmp/zh-CN/RPMS
   if [ $? -eq 0 ];then
 yum install -y libXext.x86_64 yum groupinstall -y "X Window System" rpm -Uvih *.rpm echo 'install desktop service ...' rpm -Uvih desktop-integration/openoffice4.1.6-redhat-menus-4.1.6-9790.noarch.rpm echo 'install finshed...' else echo 'download package error...' fi } install_ubuntu() { wget https://kkfileview.keking.cn/Apache_OpenOffice_4.1.6_Linux_x86-64_install-deb_zh-CN.tar.gz -cO openoffice_deb.tar.gz && tar zxf /tmp/openoffice_deb.tar.gz && cd /tmp/zh-CN/DEBS echo $? if [ $? -eq 0 ];then apt-get install -y libxrender1 apt-get install -y libxt6 apt-get install -y libxext-dev apt-get install -y libfreetype6-dev dpkg -i *.deb echo 'install desktop service ...' dpkg -i desktop-integration/openoffice4.1-debian-menus_4.1.6-9790_all.deb echo 'install finshed...' else echo 'download package error...' fi } if [ -f "/etc/redhat-release" ]; then yum install -y wget install_redhat else apt-get install -y wget install_ubuntu 

安装OpenOffice,安装结束后,调用命令行,启动OpenOffice的一项服务:

soffice -headless -accept="socket,port=8100;urp;"

测试 pom.xml

<dependency>
    <groupId>com.artofsolving</groupId>
    <artifactId>jodconverter</artifactId>
    <version>2.2.1</version>
</dependency>
<!--日志--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> 

public class OfficeConverter { public static void main(String[] args) { File inputFile = new File("C:/test/yy.doc"); File outputFile = new File("C:/test/yy.html"); OpenOfficeConnection con = new SocketOpenOfficeConnection(8100); try { con.connect(); } catch (ConnectException e) { System.err.println("文件转换出错,请检查OpenOffice服务是否启动。"); e.printStackTrace(); } DocumentConverter converter = new OpenOfficeDocumentConverter(con); converter.convert(inputFile, outputFile); con.disconnect(); } }

libreoffice

安装

yum install libreoffice libreoffice-headless

wordhtml

soffice --headless --convert-to html:HTML test.docx

poi、open office、libreoffice的区别

poi纯java转换,转换比较慢

openoffice小文件转换速度快,libreoffice转换较慢,大文件libreoffice转换快

openoffice只支持java代码操作,libreoffice支持命令行和java代码

最重要一点openoffice支持队列转换,libreoffice不支持,同时转换一个文件会出现soffice卡死,

参考

tech.souyunku.com/len0031/p/1… blog.csdn.net/guanmao4322…

本文使用 mdnice 排版

文章永久链接:https://tech.souyunku.com/27480

未经允许不得转载:搜云库技术团队 » Word转html

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们