Word转PDF,PNG,HTML神器XDOC
原创
猿天地2020-08-02 17:09:10©著作权
文章标签
神器;
阅读数
601
©著作权归作者所有:来自51CTO博客作者猿天地的原创作品,如需转载,请注明出处,否则将追究法律责任
https://blog.51cto.com/u_14888386/2515901
**前言**
在很多的项目中都会遇到操作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文件,如下图:
![](https://s4.51cto.com/images/blog/202008/02/701758a9320bccf8a31e714b0061ffeb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
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的操作,是不是很简单。
![](https://s4.51cto.com/images/blog/202008/02/a2e892d9b6a399006d7bd5865656e505.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
image.png
接下来实现一个稍微复杂点的需求,在将word转pdf的时候,动态去修改word中的内容,我们修改下docx文件,将标题变成动态的,使用${文字}格式编写。
![](https://s4.51cto.com/images/blog/202008/02/f3fc7b54fc40b6d34658b3d73d9f40e7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
image.png
也就是说这个模板是固定的,但是我们可以在生成的时候去设置这个标题的文字,看代码:
```
XDocService service = new XDocService();
try {
Mapparam = new HashMap();
param.put("标题", "微服务");
service.run("E:\\test\\test.docx", param, new File("E:\\test\\test.pdf"));
} catch (IOException e) {
e.printStackTrace();
}
```
涉及到参数的传递我们用run方法,效果如下:
![](https://s4.51cto.com/images/blog/202008/02/be89efc8cb75520a9f010c11c6d4eb0d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
image.png
最后再讲一个点,将docx中的图片也能动态替换,同样的修改模板,改成占位符就可以了。
![](https://s4.51cto.com/images/blog/202008/02/ac64eadad412ee5748b596e5602bd068.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
image.png
代码需要将图片作为参数传入,有2种方式,一种是传递图片的地址,需要是http://xx.png,能够通过网络访问,还有一种就是本地图片,本地图片需要转成DataURI方式传入。
```
XDocService service = new XDocService();
try {
Mapparam = new HashMap();
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();
}
```
![](https://s4.51cto.com/images/blog/202008/02/bae08c15a79fa3bcab89dd89d1146f15.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
image.png
就写这么多吧,更多的使用方式,请自行去官网查看文档。总之就是一句话,很好用。
![](https://s4.51cto.com/images/blog/202008/02/c02192804249f5f70db782f2c3d9bbe0.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
尹吉欢
我不差钱啊
喜欢作者
打赏
赞
收藏
评论