freemarker生成的word文档在app端无法打开

原因:app下载项目中的word文档后打不开, freemarker根据xml模板生成的word的文件类型是Microsoft Office Word 97 - 2003 文档的。 
自己创建的word在手机上是可以打开的。 
模板本身就是XML格式文件,freemarker使用的方式是用类型字符串替换的方式,替换掉XML里面的字符然后生成按相同格式生成文件,然后后缀名定为.doc而已。 
由于XML文件的头部有<?mso-application progid="Word.Document"?>这样的字符串,所以电脑上的office word读到这个信息后知道按转换xml里标签转换成word的格式。 
但手机上的word软件则没有这个功能,所以就打开失败。

处理方法:见

maven中引入

<dependency>
        <groupId>com.hynnet</groupId>
        <artifactId>jacob</artifactId>
        <version>1.18</version>
    </dependency>

下载jacob-1.18.jar  【完整下载地址:https://download.youkuaiyun.com/download/jason_996/10606395

https://download.youkuaiyun.com/download/forlovehuan/10587731

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public static String createNewWord() {
    ActiveXComponent _app = new ActiveXComponent("Word.Application");
                _app.setProperty("Visible", Variant.VT_FALSE);
     Dispatch documents = _app.getProperty("Documents").toDispatch();
     // 打开FreeMarker生成的Word文档
    Dispatch doc = Dispatch.call(documents, "Open","原文件路径/oldname.doc", Variant.VT_FALSE, Variant.VT_TRUE).toDispatch();
               // 另存为新的Word文档
                Dispatch.call(doc, "SaveAs", "新文件路径/name.doc", Variant.VT_FALSE, Variant.VT_TRUE);

                Dispatch.call(doc, "Close", Variant.VT_FALSE);
                _app.invoke("Quit", new Variant[] {});
                ComThread.Release();    
}

运行时报错

 java.lang.UnsatisfiedLinkError: no jacob-1.18-x64 in java.library.path

https://download.youkuaiyun.com/download/forlovehuan/10586055

放置在jdk/bin目录下,重新启动项目即可(jdk1.8.0_171放置在jdk/jre/bin )。

项目发布在服务器时,报错

 Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.jacob.
activeX.ActiveXComponent
  • 或者这个错误:
  • com.jacob.com.ComFailException: Can't co-create object解决办法(同事电脑上装office就可以,我自己装的是wps就不行)

确定以上两个没有问题,需在服务器安装office,问题解决

这个方案只支持windows,很遗憾不支持linux(服务器是linux,我只能把word 最后生成pdf让手机app来查看的),还有一个方法:用freemarker生成docx(我用的是2013的模板),问题完美解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值