300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Java使用第三方工具包将word转换为PDF文件

Java使用第三方工具包将word转换为PDF文件

时间:2018-08-17 04:19:12

相关推荐

Java使用第三方工具包将word转换为PDF文件

**

最近有个需求是生成报表的同时需要提供word文档下载和PDF下载的功能,试了几款软件,最终选用Aspose.words工具,但是试用版会自动加水印和有页数限制,下附去水印教程和页数限制去除,方法实际操作通过,如果公司有预算可使用正版购买。

1、首先第一步需要下载对应的工具jar包,下方附下载地址

链接:/s/1bUIQPDjAfKKcvKmdpZzcKA?pwd=yyds

提取码:yyds

2、第二步需要配置本机maven环境变量,此步较为简单,忽略。最终结果如下

3、按win+R 输入 cmd 输入以下命令安装当前下载的jar包到maven本地仓库

mvn install:install-file -DgroupId=com.aspose -DartifactId=aspose-words -Dversion=15.8.0 -Dpackaging=jar -Dfile=D:\aspose-words-15.8.0-jdk16.jar

4、单纯使用jar包还是不行,需要在项目resources下面新建一个license.xml文件。在后面使用时引用该文件,即可去掉水印,以及页数限制。

<?xml version="1.0" encoding="UTF-8" ?> Aspose.Total for Java Aspose.Words for Java Enterprise 20991231 20991231 8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7 sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU= ![在这里插入图片描述](https://img-/098ea337119d44a98d6c8ba16cc7fec4.png)

5、具体使用方法

新建一个Word转Pdf的工具类

package com.alei.utils;import java.io.FileOutputStream;import java.io.IOException;import com.aspose.words.Document;import com.aspose.words.License;import com.aspose.words.SaveFormat;import mons.lang3.exception.ExceptionUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import java.io.File;import java.io.InputStream;/*** @author ShiLei* @create -04-10 13:15* word转pdf工具类*/public class WordToPdfAsposeUtil {private static final Logger logger = LoggerFactory.getLogger(WordToPdfAsposeUtil.class);/*** 获取aspose证书 去除水印以及页数限制* @auther: ShiLei* @date: -04-10 13:15* @return boolean*/private static boolean getLicense() {boolean result = false;InputStream is = null;try {Resource resource = new ClassPathResource("license.xml");is = resource.getInputStream();License aposeLic = new License();aposeLic.setLicense(is);result = true;} catch (Exception e) {logger.error("获取证书失败:{}", ExceptionUtils.getStackTrace(e));e.printStackTrace();}finally {if (is != null) {try {is.close();} catch (IOException e) {logger.error("流关闭异常:{}", ExceptionUtils.getStackTrace(e));e.printStackTrace();}}}return result;}/*** word转pdf静态方法* @auther: ShiLei* @date: -04-10 13:15* @param inPath word文件全路径含文件名* @param outPath pdf输出全路径含文件名* @return boolean*/public static boolean docToPdf(String inPath, String outPath) {// 验证License 若不验证则转化出的pdf文档会有水印产生if (!getLicense()) {return false;}FileOutputStream os = null;try {long old = System.currentTimeMillis();// 新建一个空白pdf文档File file = new File(outPath);os = new FileOutputStream(file);// inPath是将要被转化的word文档Document doc = new Document(inPath);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换doc.save(os, SaveFormat.PDF);long now = System.currentTimeMillis();// 转化用时logger.info("word转换pdf成功,共耗时:" + ((now - old) / 1000.0) + "秒");} catch (Exception e) {logger.error("word转pdf失败:{}", ExceptionUtils.getStackTrace(e));return false;}finally {if (os != null) {try {os.flush();os.close();} catch (IOException e) {logger.error("流关闭异常:{}", ExceptionUtils.getStackTrace(e));e.printStackTrace();}}}return true;}public static void main(String[] args) {System.out.println(docToPdf("D:\\abc.docx", "D:\\abc.pdf"));}}

6、引入对应的依赖,运行main方法,最终查看对应路径下是否生成

<dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8.0</version><classifier>jdk16</classifier></dependency>

注意注意注意

当前代码在Windows下运行正常,无任何问题。是因为Windows下默认支持中文字体库,Linux下运行会存在格式或者乱码问题,解决办法如下:

1、前往Windows的C:\Windows\Fonts 将下面的字体库全部拷贝到Linux的目录下

2、 将字体库上传至部署的Linux机器目录下(/usr/share/fonts)

3、 新建文件夹 windows,字体库上传至windows文件夹中

mkdir windows (创建文件夹)

4、 进入windows目录下设置当前字体库的权限

sudo chmod 755 /usr/share/fonts/windows/*

5、 接着根据当前目录下的字体建立scale文件

sudo mkfontscale

6、 接着建立dir文件(如果存在报错请忽略)

sudo mkfontdir

7、然后运行

sudo fc-cache

8、重启服务

至此解决Linux下运行乱码格式错乱问题

至此转换结束,我目前实现方式是通过流方式将word下载到本地文件夹,转换pdf上传对应目录,然后将本地文件夹删除(因为word是之前就生成过对应的文件服务器,所以使用本地做一层转换)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。