Word转PDF,PNG,HTML神器XDOC

前言

在很多的项目中都会遇到操作Word文件的需求,特别是To B的这种项目。像一些招聘网站最常见的一个功能那就是导出简历啦,可以导出doc,pdf,html等格式。

需求:

  • 用户上传Word模板,需要将数据替换到Word模板中,然后输出PDF文件。
  • 上传的模板需要在网页中显示,也就是输出的PDF文件是什么样子,网页中也要显示什么样子。

基于上面的需求,最基本的功能还是得修改Word文件,修改完成之后然后再转PDF, 如何在网页中显示呢?比如说我们可以生成html格式,嵌入到网页中,生成图片也是可以的。

最常见的操作框架有POI, OpenOffice也挺强大,可以直接通过命令的方式转换格式。上面的需求你用其他的框架肯定能实现,可能会比较麻烦,今天给大家推荐一个非常好用的神器XDOC。

我之所以称为神器,原因是确实非常好用,主要是简单,不需要任何jar包依赖,不需要安装任务软件,直接有云服务支持,并且是免费的。

官网地址:http://www.xdocin.com/

使用

使用有下面几种方式:

  • 直接调用接口
  • 采用封装好的jar

为了简单我们直接使用封装好的,要么引入jar,要么复制XDocService.java

XDocService用于在java应用中和操作系统命令行中调用xdoc服务。

程序库 :

http://www.xdocin.com/XDocService.ja

源代码 :

http://www.xdocin.com/XDocService.java

首先我们先来简单的对一个word文件转pdf操作, 在E:\test目录下创建一个test.docx文件,如下图:

image.png

文件中有文字,字体设置,有图片,接下来开始编写转换代码:

XDocService service = new XDocService();
try {
    service.to("E:\\test\\test.docx", new File("E:\\test\\test.pdf"));
} catch (IOException e) {
    e.printStackTrace();
}

只需要2行代码,我们就可以实现word转pdf的操作,是不是很简单。

image.png

接下来实现一个稍微复杂点的需求,在将word转pdf的时候,动态去修改word中的内容,我们修改下docx文件,将标题变成动态的,使用${文字}格式编写。

image.png

也就是说这个模板是固定的,但是我们可以在生成的时候去设置这个标题的文字,看代码:

XDocService service = new XDocService();
try {
    Map<String, Object> param = new HashMap<String, Object>();
    param.put("标题", "微服务");
    service.run("E:\\test\\test.docx", param, new File("E:\\test\\test.pdf"));
} catch (IOException e) {
    e.printStackTrace();
}

涉及到参数的传递我们用run方法,效果如下:

image.png

最后再讲一个点,将docx中的图片也能动态替换,同样的修改模板,改成占位符就可以了。

image.png

代码需要将图片作为参数传入,有2种方式,一种是传递图片的地址,需要是http://xx.png,能够通过网络访问,还有一种就是本地图片,本地图片需要转成DataURI方式传入。

XDocService service = new XDocService();
try {
    Map<String, Object> param = new HashMap<String, Object>();
    param.put("标题", "微服务");
    param.put("图片", "http://cxytiandi.com/images/gongzhonghao.jpg");
    service.run("E:\\test\\test.docx", param, new File("E:\\test\\test.pdf"));
} catch (IOException e) {
    e.printStackTrace();
}

原文发布于微信公众号 - 猿天地(cxytiandi)

原文发表时间:2018-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(十四):用户密码找回

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

35910
来自专栏天天

跨域问题

21230
来自专栏hbbliyong

WPF备忘录(7)WPF图片资源路径介绍

在项目中增加两张图片Content.jpg和Resource.jpg,分别将其生成操作属性设置为Content和Resource。      在界面中增加两个I...

30150
来自专栏魏艾斯博客www.vpsss.net

wordpress 无法建立到 wordpress org 安全连接的解决办法

网友求助,说安装 Avada 插件时遇到如下错误提示:wordpress 无法建立到 wordpress.org 的安全连接,请联系您的服务器管理员。询问网友得...

15620
来自专栏企鹅号快讯

用户空间和内核空间

学习 Linux 时,经常可以看到两个词:User space(用户空间)和Kernel space(内核空间)。 简单说,Kernel space 是 Lin...

21080
来自专栏王二麻子IT技术交流园地

二、VueJs 填坑日记之基础项目构建

在上一篇文章中,大致介绍了一下本系列博文以及学习vuejs我们需要了解的一些概念,希望大家认真阅读,所谓知己知彼,百战百胜,学习也一样,工欲善其事,必先利其器,...

22070
来自专栏自由而无用的灵魂的碎碎念

网页中meta标签的使用

最近,看《Mastering Integrated HTML and CSS》时,在"为适应搜索引擎而调整网站"一节简要介绍了<meta>标签。不过,介绍比较粗...

11820
来自专栏Alice

iOS开发多线程在实际项目中的运用

        同一时间,CPU只能处理一条线程,也就是只有一条线程在工作。所谓多线程并发(同时)执行,

9020
来自专栏Java帮帮-微信公众号-技术文章全总结

集群间如何实现session共享【面试+工作】

4K80
来自专栏电光石火

js中几种实用的跨域方法原理详解

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数...

32080

扫码关注云+社区

领取腾讯云代金券