整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Java 使用jacob 将word转为html的一

Java 使用jacob 将word转为html的一个坑

近在工作中遇到一个bug,将word转换成html,转换成功之后在浏览器中打开其中图片不显示,使用img标签,src指定图片相对地址又是能显示的,排除图片问题。

网上能搜索到的demo

打开转码之后的html代码发现,生成的是vml图片标签,这个在IE9以后就不支持了,更别说现在的主流浏览器了。

生成的html中使用的是vml标签

将这个跟大佬分析分析,各种文档一查,咔咔咔大致分析出问题所在。原来jacob使用的是word本身自带的功能,相当于把word打开另存为html,于是手动将word转为html试了一下,果然效果与代码转换一致,这时候注意到word另存为时有一个web选项,里面有个使用vml渲染图片默认是选中的,去掉这个选项,再次生成,图片正常显示。



到这里基本已经确定了问题的解决思路,另存为时不勾选这个选项,那么问题来了,怎么利用jacob操作另存为时去掉这个选项呢,想去搜搜看jacob相关的文档,结果不知道是不是因为这个很老了,网上大多数都是demo,根本没有相关的文档可看,Github上也是只言片语,根本无从查起。

jacob github 地址:https://github.com/joval/jacob

微软官网文档

官方文档连接:https://docs.microsoft.com/zh-cn/office/vba/api/word.weboptions.relyonvml

微软官网查询相关文档,发现其实是可以关闭的,于是代码变成这样

关闭relyOnVml

再次运行程序,这次转出来的html就能在浏览器打开了。

总结,在这次解决问题的过程中,学会了往更深层次去想问题,找对方向,迎难而上。

记录一下这个问题解决的经验,也希望能帮到同样遇到这个问题的人。

用Spire.Doc,可以轻松地将HTML插入到Word文档中。下面是一个示例代码:

import com.spire.doc.Document;

import com.spire.doc.FileFormat;

import com.spire.doc.Section;

import com.spire.doc.documents.HorizontalAlignment;

import com.spire.doc.fields.DocPicture;

import com.spire.doc.fields.HtmlLayoutType;

import com.spire.doc.fields.TextRange;

import java.io.*;

public class HtmlToWord {

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

//定义文档对象

Document doc=new Document();

//添加一个段落

Section section=doc.addSection();

TextRange tr=section.addParagraph().appendText("下面是插入HTML到Word的示例:");

tr.getCharacterFormat().setBold(true);

tr.getCharacterFormat().setFontSize(16f);

//定义HTML内容

String htmlContent="<html><body><h1>Hello, World!</h1><p>This is an example of inserting HTML into a Word document using Spire.Doc.</p></body></html>";

//插入HTML到Word

DocPicture htmlPicture=section.addParagraph().appendPicture(

htmlContent.getBytes(), HtmlLayoutType.Inline);

htmlPicture.setHorizontalPosition(0);

htmlPicture.setVerticalPosition(30);

htmlPicture.setWidth(520);

htmlPicture.setHeight(520 * 9 / 16);

//设置段落格式

section.getParagraphFormat().setHorizontalAlignment(HorizontalAlignment.Center);

//保存为Word文档

doc.saveToFile("HtmlToWord.docx", FileFormat.Docx);

System.out.println("Word文档已生成。");

}

}

在上面的代码中,我们首先定义一个文档对象并添加一个段落。然后定义HTML内容,并使用 appendPicture 方法将HTML插入到Word文档中。 HtmlLayoutType 枚举类型可用于指定HTML的布局方式。最后,我们设置了段落格式并将文档保存为Word格式。在输出语句中,我们打印了一条消息以通知用户生成文档的完成。

AVA中将WORD转换为HTML导入到CKEDITOR编辑器中(解决图片问题,样式,非常完美),ckeditor粘贴word,ckeditor3粘贴word,ckeditor4粘贴word,ckeditor5粘贴word内容,ckeditor复制word图片,ckeditor复制粘贴word图片,ckeditor复制word内容,ckeditor粘贴word图片,复制word图片粘贴到ckeditor,

前端用了VUE2,VUE3,React,HTML5,也是一个新项目,为了方便用的这些框架,实际上这个是无所谓,功能的实现和前端这些框架没什么关系。

后端用了PHP,JSP,ASP,ASP.NET,SpringBoot,功能实现和后端用的什么开发语言无关,后端只提供一个文件上传的接口,HTTP form协议,图片上传时会调这个接口。

编辑器是ckeditor5,为ckeditor编辑器增加粘贴Word图片的功能,支持快捷键操作(Ctrl+V),支持多种系统:Windows,macOS,Linux,信创国产化环境,中标麒麟,银河麒麟,统信,龙芯。

支持word粘贴,word内容粘贴,word图文粘贴,word图片粘贴,粘贴后图片能够自动上传到服务器中,然后将图片和内容HTML添加到编辑器中,上传接口地址能够自定义

用户使用操作起来更方便一些,一般发新闻,或者发文章用的比较多,基本上每天发新闻,发文章都会用到,

这个功能确实为用户带来了方便。

1.1. 集成到CKEditor3.x

主要步骤如下:

1.上传WordPaster文件夹

一般将WordPaster.cab放在WordPaster目录下。

2.上传CKEditor插件目录

3.引入JS,初始化控件

注意:不要重复引入jquery,如果您的项目已经引入了jq,则不用再引入jq-1.4

如果希望添加到默认工具栏中,请修改ckeditor.js,在toolbar_Full中增加imagepaster,netpaster

为ckeditor增加插件(imagepaster,netpaster,pptpaster,pdfimport):

注意:

1.如果接口字段名称不是file,请配置FileFieldName。ueditor接口中使用的upfile字段

参考:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45

2.如果接口返回JSON,请配置ImageMatch

参考:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1

3.如果接口返回的图片地址没有域名,请配置ImageUrl

参考:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936
4.如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:http://www.ncmem.com/doc/view.aspx?id=8602DDBF62374D189725BF17367125F3

常见问题:

1.为什么整合到项目中图片无法上传?
请先测试接口:http://www.ncmem.com/doc/view.aspx?id=61f361025c9247098f6a15c3dfc53db5