word和html互换,word与html互转(2) -- html转word

使用忠告

使用该方式进行xhtml到word的转换, 简单转换是可以, 但是可能并没有想象中那么满意, 转换出来的word格式并不完美, 比如目录和标题都会丢失, 标题显示看起来一样, 但是是用正文加粗和加大字号来显示的. 毕竟word是一种文档格式, 而html是一种标记性语言, 要想实现完美兼容和转换很难

加上word与html互转(1) -- word转html, 虽然word与html互转都有实现手段, 但是考虑到转换的格式复杂度和后期的维护成本, 我们最后放弃去实现这个成本高但是对项目影响不大的功能

实现

实现方式

使用poi+xdocreport来实现

poi:都熟悉, 这边不作介绍

Docx4j:是github上的一个开源项目, 使用起来很简单, 可以很轻松的将xhtml转为docx, 他的具体介绍可以去他的项目地址查看--项目地址

引入相关程序包

org.apache.poi

poi

3.14

org.apache.poi

poi-scratchpad

3.14

org.apache.poi

poi-ooxml

3.14

org.apache.poi

poi-ooxml-schemas

3.14

org.apache.poi

ooxml-schemas

1.3

org.docx4j

docx4j-ImportXHTML

3.0.0

html转docx

public static void main(String[] args) throws Exception {

String inputfilepath = "C:\\Users\\Administrator\\Desktop\\test.html";

String baseURL = "C:\\Users\\Administrator\\Desktop";

String stringFromFile = FileUtils.readFileToString(new File(inputfilepath), "UTF-8");

String unescaped = stringFromFile;

if (stringFromFile.contains("</") ) {

unescaped = StringEscapeUtils.unescapeHtml(stringFromFile);

}

// 设置字体映射

RFonts rfonts = Context.getWmlObjectFactory().createRFonts();

rfonts.setAscii("Century Gothic");

XHTMLImporterImpl.addFontMapping("Century Gothic", rfonts);

// 创建一个空的docx对象

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

XHTMLImporter importer = new XHTMLImporterImpl(wordMLPackage);

importer.setTableFormatting(FormattingOption.IGNORE_CLASS);

importer.setParagraphFormatting(FormattingOption.IGNORE_CLASS);

NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();

wordMLPackage.getMainDocumentPart().addTargetPart(ndp);

ndp.unmarshalDefaultNumbering();

// 转换XHTML,并将其添加到我们制作的空docx中

XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);

XHTMLImporter.setHyperlinkStyle("Hyperlink");

wordMLPackage.getMainDocumentPart().getContent().addAll(

XHTMLImporter.convert(unescaped, baseURL));

wordMLPackage.save(new java.io.File("C:\\Users\\Administrator\\Desktop\\test.docx"));

}

html转doc

public void test() throws IOException {

//这边我为了测试, 使用的是自己拼接出html

String html = getHtml();

byte b[] = html.getBytes("utf-8");

// 根据数组

ByteArrayInputStream bais = new ByteArrayInputStream(b);

POIFSFileSystem poifs = new POIFSFileSystem();

DirectoryEntry directory = poifs.getRoot();

directory.createDocument("WordDocument", bais);

poifs.writeFilesystem(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.doc"));

}

public String getHtml() {

StringBuilder html = new StringBuilder();

html.append(""-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");

html.append("");

html.append("

");

html.append("

");

html.append("

  1. ");

html.append("

111

");

html.append("

2222

");

html.append("

33333

");

html.append("

444444

");

html.append("

");

html.append("

");

html.append("

html.append("

html.append("

");

html.append("

table1");

html.append("

table2

");

html.append("

");

html.append("

");

html.append("

table3");

html.append("

table4

");

html.append("

");

html.append("

");

html.append("

html.append("");

return html.toString();

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2016年3月13日02:03:53

最近状态很糟糕&#xff0c;知道原因但是却又道不清说不明、、&#xff08;也许一句话就可以说明了&#xff1a;毕业季&#xff09; 自身存在太多太多问题了。 平时自己没怎么发现&#xff0c;在这一个多月的时间里&#xff0c;觉得自己完完全全变了一个人了&#xff0c;连我自…

arduino char*转string_Java 中 String 类的常用方法汇总

一、String 类的概念以及特性1、String 类的概念String 类代表字符串&#xff0c;在 java.lang 包中。字符串是常量 &#xff0c;用双引号引起来表示。 它的值在创建之后不能更改 。由 0 或多个字符组成&#xff0c;可以变相的理解成是一个由字符组成的数组。2、String 类的特性…

airtest测试网页_Airtest

软件简介Airtest是一个跨平台的UI自动化测试框架&#xff0c;适用于游戏和App。目前支持Windows和Android平台&#xff0c;iOS支持正在开发中。Airtest提供了跨平台的API&#xff0c;包括安装应用、模拟输入、断言等。 基于图像识别技术定位UI元素&#xff0c;你无需嵌入任何代…

html中的ppt文字不清晰,HTML页面的文字布局与文字效果.ppt

无序列表是一种“项目符号列表”。其中的项目都带有项目符号前缀。该列表包含在无序列表标记.. 内。列表中的每个项目都使用列表标记进行标记&#xff0c;其中LI表示List Item(列表项)。关闭标记是可选的。 输出时每一清单条目缩进&#xff0c;并且以黑点标示 注意清单条目不需…

R文件丢失

1.xml中有错误 2.未选中自动生成 解决&#xff1a; 检查代码&#xff0c;删除更目录后再生成转载于:https://www.cnblogs.com/childyngy/p/5271579.html

python读取配置文件获取所有键值对_python读取配置文件

转载&#xff1a;https://my.oschina.net/u/3041656/blog/793467 配置文件作为一种可读性很好的格式&#xff0c;非常适用于存储程序中的配置数据。在每个配置文件中&#xff0c;配置数据会被分组&#xff08;比如"config"和”cmd“&#xff09;.每个分组在其中指定对…

python调用numpy视频_Numpy的文件输入和输出使用

本课程讲解现在工业界和学术界流行的机器学习算法的相关知识&#xff0c;以及如何用python去实现这些算法。算法的讲解包括supervised learning(有监督式学习)和unsupervised learning(无监督式学习)两个部分。其中supervised learning包括classification(分类)和regression(回…

嵌入式软件工程师笔试题

1 . 用预处理指令 #define 声明一个常数&#xff0c;用以表明 1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2 . 写一个 "标准"宏 MIN &#xff0c;这个宏输入两个参数并返回较小的一个。 #define MIN(A,B)&…

盐城工学院计算机基础试卷,大学计算机基础及实用软件/大学计算机基础

spContent大学计算机基础及实用软件是人文学院、外语学院、经济学院和管理学院所有专业学生的必修基础课程之一&#xff0c;主要讨论计算机的发展、计算机系统及组成原理、掌握Windows7系统基本操作、熟练掌握Office 2010的基本操作、了解因特网基础与简单应用&#xff0c;本课…

如何用python写脚本_【按键教程】用python写脚本 另附垫材24与变奏22的实现

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 二、脚本中需要些什么 以PE10炮为例 #!/usr/bin/python #对mac/linux用户&#xff0c;可以点击脚本文件即运行 # -*- coding: utf-8 -*- #声明文字编码&#xff0c;在脚本用汉字时必备&#xff0c;全用英文也推荐写上 import thre…

河北体检系统诚信企业推荐_应用多的隔膜计量泵价格诚信企业推荐

应用多的隔膜计量泵价格诚信企业推荐无害化处理&#xff1a;经对标&#xff0c;注意药剂量可以适当降低&#xff0c;能降低药剂量的单位&#xff0c;反之降低。车用齿轮箱定位测量仪与计量泵计量无关&#xff0c;关键在于他们都是直线运动&#xff0c;动力输出的横轴主运动&…

CSS中position的4种定位详解

大家都知道&#xff0c;css中的position有4种取值&#xff0c;分别是static、fixed、relative、absolute。 详细解释&#xff1a; static&#xff1a;相当于没有定位&#xff0c;元素会出现在正常的文档流中。 fixed&#xff1a;元素框的表现类似于absolute&#xff0c;但是fix…

it计算机哪些专业术语,IT之家学院:笔记本电脑专业术语科普

IT之家网友现在为大家整理了一些在笔记本电脑商的专业术语解释&#xff0c;比如触摸屏、触摸板、指纹识别等具体涵义。触摸屏电阻式触摸屏是在强化玻璃表面分别涂上两层OTI 透明氧化金属电层&#xff0c;两层之间用细小的透明隔离点隔开。外层OTI涂层作导电体&#xff0c;内层O…

ideajava目录显示类成员_面试:C++不可继承类

作者&#xff1a;wxquare链接&#xff1a;https://www.cnblogs.com/wxquare/p/7280025.html面试中可能遇到让设计一个无法被继承的类。最简单的实现是将该类的构造函数设置为私有的&#xff0c;然后通过静态成员函数调用私有构造函数实例化对象&#xff0c;这样的类确实不可继承…

c++ 三维数组 初始化_013 JAVA 多维数组及数组的拷贝、冒泡排序、二分法查找...

1.多维数组多维数组的元素又是数组&#xff0c;可以有二维、三维、甚至更多维数组1.1二维数组的声明&#xff1a;数据类型 [][] new 数据类型[一维长度][二维长度]public class Test01 {public static void main(String[] args) {//一维数组的静态初始化 数据类型[] 数组名 …

js工具类

<tr><th>适用范围说明&#xff1a;</th><td colspan"5"> <textarea class"text" id"dtoinstrutcation" name"productScopeDTO.instrutcation" wrap"PHYSICAL" Null"true" rows"2…

自考计算机成绩,自考成绩计算机中是什么意思?

你说电脑是什么意思&#xff1f;计算机等级考试有两种&#xff0c;一种是全国高校计算机水平考试(CCT)&#xff0c;另一种是全国计算机等级考试(NCRE)。你对这两种测试了解多少&#xff1f;1什么是CCT&#xff1f;CCT的全称是“全国高校计算机水平考试”&#xff0c;让人感觉像…

httpservletrequest 设置请求头_请求和常用对象

## 一、主要内容![](https://raw.githubusercontent.com/Cushier/picture-java/master/middle/20190712150414.png)## 二、核心目标理解几个常用对象的意义和作用掌握几种请求的发出方式掌握数据的发送和接收方式掌握跳转方式掌握乱码的解决## 三、请求的方式要访问服务器首先需…

Jmeter文章索引贴

一、基础部分&#xff1a; 使用Jmeter进行http接口测试Jmeter之Http Cookie ManagerJmeter之HTTP Request DefaultsJmeter之逻辑控制器(Logic Controller)Jmeter属性和变量Jmeter组件执行顺序与作用域Jmeter参数化Jmeter关联Jmeter分布式测试Jmeter代理录制脚本Jmeter调试工具-…

from mysql partition select_爬虫(九十九)mysql详解二

**mysql中字段的常见类型: **二进制位 bit(长度)tinyint[(长度)] [有无符号unsigned] [位数低于长度时候是否填充零zerofill] 有符号表示范围-128 ~ 127, 无负号表示范围 0 ~ 255; 可用tinyint(1)来模拟boolean类型; *整型中的长度不做限制用, 仅仅做显示用, 即长度大于位数时候…