freemarker生成word 兼容wps/office/小程序打开

freemarker生成word 兼容wps/office/小程序打开 (服务器必须是windows)

一:目的:兼容wps/电脑端office/小程序打开

  1. freemarker生成的word底层技术是XML,生成的word是不兼容小程序打开的

  2. freemarker创建word模板的时候 文件格式选择为
    (1)XML文件 生成的word只能兼容WPS,小程序不支持打不开
    (2)Word XML 文档 生成的word兼容WPS、PC端office,小程序不支持打开

  3. .避坑点如果选择的文件格式Word XML需要在注意下生成图片的问题,并不是直接在标签里面渲染的图片Base64,而是通过绑定的方式渲染的

    (1)顶部通过标签将图片和图片显示区域绑定
    顶部标签

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
	<Relationship Id="rId5"
       Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
       Target="media/image5.png"/>
</Relationships>

Id:图片显示区域的标签id 对应图片显示区域的 r:id
在这里插入图片描述

Target:图片的名称 对应底部图片的 pkg:name
在这里插入图片描述

图片显示区域

<v:imagedata r:id="rId5" o:title="eb84b15f3f5f075f811833e54b45f877"/>

底部图片

<pkg:part pkg:name="/word/media/image5.png"
        		pkg:contentType="image/png"
        		pkg:compression="store">
		<pkg:binaryData>base64数据</pkg:binaryData>

二: freemarker生成word 此处不做描述(请自行查阅)
三:实现是用 jacob 将freemarker生成的word转成office可以打开的word

  1. 本次代码使用的环境windows 64位系统
  2. 需要使用的文件有两个jacob-1.18-x64.dll和jacob.dll 两个文件
  3. 步骤
    (1)系统安装office
    (2)jacob-1.18-x64.dll 文件放置 java_home得jdk1.8.0_131\jre\bin目录下面
    (3)jacob.dll 64位系统放置C:\Windows\System32 目录下

pom

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

文件转换代码

 String newFile ="要生成的文件目录+文件名";
 String oldFile ="freemarke生成的文件目录+文件名";
 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",oldFile, Variant.VT_FALSE, Variant.VT_TRUE).toDispatch();
        // 另存为新的Word文档
 Dispatch.call(doc, "SaveAs", newFile, Variant.VT_FALSE, Variant.VT_TRUE);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

小白菜S

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值