-
注意事项
Anyline Office要实现的是精确控制每个html标签转换成word标签,主要用来处理表格,书签
应用场景如:资质证书、检测报告等html标准与word标准并非完全兼容,如word中并不支持段落(html.div)的多层嵌套;
Anyline Office并不能把任何的html都完整的转换成word,不支持javasript脚本,建议在生成数据报表时使用。
如果是要把整个HTML页面或富文本编辑器中的内容转成word,应该是直接把HTML源码压缩到word文档中。word本身支持HTML解析。
如POI里这样实现,执行后是生成一个doc文件,生成的其实是一个压缩文件,压缩包内只有一个html文件,可以用word打开另存为docx文件,另存的过程就是把html标签转成word标签的过程,生成的docx就是下个结构完整word文档了org.apache.poi.poifs.filesystem.POIFSFileSystem poifs = new POIFSFileSystem(); org.apache.poi.poifs.filesystem.DirectoryEntry directory = poifs.getRoot(); OutputStream out = new FileOutputStream("D:\\word.doc"); directory.createDocument("WordDocument", new FileInputStream("D:\\index.html")); poifs.writeFilesystem(out); //如果是一段html可以这样 byte b[] = html.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(b); POIFSFileSystem poifs = new POIFSFileSystem(); DirectoryEntry directory = poifs.getRoot(); DocumentEntry documentEntry = directory.createDocument("WordDocument", bais); poifs.writeFilesystem(out); 关闭out
-
关于占位符被拆分的问题
如果是手工输入的话,占位位经常会被自动拆分到多个标签内,如${max}会被自动拆分成三部分 1.$ 2.max 3.} -
生成的docx中的换行符在浏览器插件中无效的问题
通过HTML转换成word时 通过情况下可以通过HTML标签<br/>生成word换行符<w:br/> 但是有些浏览器中预览时可能没有正常换行,是因为有些插件并一定能正常解析<w:br/> 可以换成 用<DIV>标签生成<w:p>标签 -
关于word图片与html图片相互转换
HTML标签中的图片一般是一个URL,而WORD中的图片是一个压缩的WORD文档中的本地文件 所以在HTML与WORD相互转换时会涉及到图片的上传与下载 HTML转换成WORD时,需要根据IMG.SRC中图片URL下载到本地,再压缩到WORD文档中,所以需要提供一个Downloader实现downl -
字体样式无效的问题
<w:r> <w:t>中文ABC123</w:t> <w:rPr> <w:bdr/> <w:sz w:val="21"/> <w:rFonts w:ascii="Times New Roman" w:eas -
${key}尽量不要出现在书签中
${key}尽量不要出现在书签中,因为书签在执行替换时会把${key}替换掉 -
html标签要通过xml标准验证
html标签要通过xml标准验证,Anyline Office使用dom4j来解析html,并不像浏览器容错性那么强,特别是没有结束标签的片段会导致解析失败。 -
如果从文件中读取HTML片段,文件格式尽量用UTF-8不要用UTF-8+BOM
如果从文件中读取HTML片段,文件格式尽量用UTF-8不要用UTF-8+BOM,否则有可能因为trim()失效导致未知的异常 -
div span只适配了inline,block,inline-block
当前版本中(8.5.1)div span标签的style.display只适配了inline,block,inline-block,没有处理其他的值。 -
text两侧的空格、回车不占空间
text两侧的空格、回车不占空间,在执行解析时会清除两侧的不可见字符,但中间的不会清除,空格在word中会表现出来,这与html预览的效果会有差异。 -
table的每一行要保持td数量一致(包含colspan,rowspan的值)
table的每一行要保持td数量一致(包含colspan,rowspan的值),colspan/rowspan不要算错,如果最终计算的列数量不一致会导致table解析过程中数组越界。 虽然word中支持table每行tc的数量不同,但当前版本(8.5.1)中还没有实现。