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();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值