公司开发的web项目需要导出word,上网搜索后选择Freemarker来实现这个功能。
1、首先用微软的word2003新建一个模板,另存为xml格式,将后缀名xml修改成ftl
2、然后freemarker加载这个ftl模板,动态生成word(成功,没有出现问题)
3、用微软office能够完美显示整个word内容,但是用wps(金shan)打开这个word,却显示的是xml的内容
xml的内容如下
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no"</o:CustomDocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="宋体" w:h-ansi="Times New Roman" w:cs="Times New Roman"/><w:font w:name="宋体"><w:altName w:val="SimSun"/><w:panose-1 w:val="02010600030101010101"/><w:charset w:val="86"/><w:family w:val="Auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000003" w:usb-1="080E0000" w:usb-2="00000010" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/></w:font><w:font w:name="@宋体"><w:panose-1 w:val="02010600030101010101"/><w:charset w:val="86"/><w:family w:val="Auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000003" w:usb-1="080E0000" w:usb-2="00000010" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/></w:font></w:fonts><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="a"><w:name w:val="Normal"/><wx:uiName wx:val="正文"/><w:pPr><w:widowControl w:val="off"/><w:jc w:val="both"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:kern w:val="2"/><w:sz w:val="21"/><w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="1"><w:name w:val="heading 1"/><wx:uiName wx:val="标题 1"/><w:basedOn w:val="a"/><w:next w:val="a"/><w:pPr><w:pStyle w:val="1"/><w:keepNext/><w:keepLines/><w:spacing w:before="340" w:after="330" w:line="576" w:line-rule="auto"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:b/><w:kern w:val="44"/><w:sz w:val="44"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="a0"><w:name w:val="Default Paragraph Font"/><wx:uiName wx:val="默认段落字体"/></w:style><w:style w:type="table" w:default="on" w:styleId="a1"><w:name w:val="Normal Table"/><wx:uiName wx:val="普通表格"/>
由于公司的电脑只能安装WPS,不能安装微软的office,于是采取另一个方法。
1、WPS新建一个word文档,然后另存为mht格式,然后用记事本打开,修改freemarker动态加载的数据项,然后保存
2、然后freemarker加载这个mht模板,动态生成word(今次用WPS打开,能够显示word内容,但是word的排版很乱,与原来自己设定word排版相差很大)
问题:
1、在继续使用freemarker的前提下(暂时不用jacob,itext,java2word),能否解决word在wps兼容问题(WPS打开时不再显示xml内容)?
2、freemarker除了支持mht、ftl模板外,还能够支持其他格式的文件模板吗?
希望各位前辈能够多多指点,不甚感激!
如果要离线观看,那么你还可以使用Apache POI试试