近在工作中遇到一个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.上传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
*请认真填写需求信息,我们会在24小时内与您取得联系。