freemarker生成world转PDF转SWF,加载到浏览器.解决最终浏览器加载的是xml代码的问题.
首先说一下需求:动态生成world,客户可在浏览器预览freemarker动态生成的world文档.
失败的解决方法:
1. world转xml, 编辑xml,用${}替换动态改变的值。
2. freemarker动态替换${}占位符的值, 更改后缀名为doc。
3. 系统安装openoffice工具,启动openoffice服务,jodconverter 调用命令将doc转成pdf.
4. 系统安装swftools工具, 调用命令,将pdf转成swf.(很多插件支持直接加载pdf到浏览器,但是对于老版本的IE,兼容性并不好,但是swf文件基本所有浏览器都支持,所以为了老版本ie兼容性,就做了一步转swf)
5. 前台js插件flashPaper,直接加载服务器上的swf文件.
最终效果, doc和pdf文档直接双击可以打开,显示的也正常。但是flashPaper加载到浏览器则显示的是一堆xml格式代码,这个代码就是freemarker生成的doc右键文本打开后的xml代码. 经过翻阅资料,flashPaper包括很多插件不支持直接加载xml形式的doc文档(可能是我没找到正确方法,如果您有, 请给留个言,谢谢),如果非要加载,那么显示到浏览器上的就会是一推xml代码。主要原因可能是freemarker产生的doc实际上只是个xml文档,右键可打开文本查看,但是直接在桌面新建的doc,docx文档右键则打不开(实际上这样建立的doc docx是一个压缩文件)
新的解决方法:
1. 新建docx文档(07版本的), 编辑docx,需要用freemarker替换的数据用${x}代替,保存 注意: 替换变量${x}时最好一次性写完,要不可能xml文档混乱
2. 右键以压缩文件形式打开,在world/下找到document.xml文件,是freemarker需要输出的结果xml文件.格式化xml查看${}占位是否有问题,有问题
不要直接改,重新编辑world,重复1步骤开始。
3. 第2步没问题,将docx文件和导出来的xml文件复制到ftl/test下,xml重命名为docx的名字.(我建立的是javaweb项目,ftl/test是在类路径下,以方便
根据类路径可读取到这个包)
4. FreemarkerUtil.printFile 根据第三步的xml生成替换后新的xml,临时保存
5. XmlToDocxDocument.printDocx 根据第三步docx模板文件,用新的x