一、说明
有两种方法,第一种方法非常简便,是利用documents4j,它是基于office组件的,linux如果没有office组件,则不支持linux系统。第二种方法是基于aspose-words,功能强大,在linux上可以完美使用。缺点就是是付费的,如果条件允许建议忽略下方的license.xml去使用正版。
二、方法一(基于documents4j)
首先pom依赖如下:
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-local</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-transformer-msoffice-word</artifactId>
<version>1.0.3</version>
</dependency>
java代码如下:
/**
* word转pdf方法
* @param wordPath
* @return
*/
public static String wordForPdf(String wordPath,String fileName){
File inputWord = new File(wordPath);//word的路径
// 获取资源路存储路径
String localPath = RuoYiConfig.getProfile();
String formatSuffix = ".pdf";
// 拼接后的文件名
fileName = fileName + formatSuffix;
String path = localPath + File.separator + fileName;
File outputFile = new File(path);//pdf文件的路径
try {
InputStream docxInputStream = new FileInputStream(inputWord);
OutputStream outputStream = new FileOutputStream(outputFile);
IConverter converter = LocalConverter.builder().build();
converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
outputStream.close();
System.out.println("word→pdf is success");
} catch (Exception e) {
e.printStackTrace();
}
return path;
}
三、方法二(基于aspose-words)
首先需要aspose-words-15.8.0-jdk16.jar包,有位老哥提供了资源,在这里可以下载aspose-words-15.8.0-jdk16.jar。
然后在boot项目中,resources文件夹下建一个lib文件夹,并把jar包放进去build path一下。
然后在resources文件夹下建一个license.xml。jar和xml如图所示:
license.xml内容如下:
<License>
<Data>
<Products>
<Product>Aspose.Total for Java</Product>
<Product>Aspose.Words for Java</Product>
</Products>
<EditionType>Enterprise</EditionType>
<SubscriptionExpiry>20991231</SubscriptionExpiry>
<LicenseExpiry>20991231</LicenseExpiry>
<SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
</Data>
<Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>
然后在新建一个utils类,去写java代码。
package com.ruoyi.common.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
public class AsposeWordsUtils {
/**
* 判断是否有授权文件 如果没有则会认为是试用版,转换的文件会有水印
*@return
*/
public static boolean getLicense() {
boolean result = false;
try {
InputStream is = AsposeWordsUtils.class.getClassLoader().getResourceAsStream("license.xml");
License aposeLic = new License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* Word转PDF操作
*@param sourcerFile 源文件
*@param targetFile 目标文件
*/
public static void doc2pdf(String sourcerFile,String targetFile) {
if (!getLicense()) {// 验证License 若不验证则转化出的pdf文档会有水印产生
return;
}
try {
long old = System.currentTimeMillis();
File file = new File(targetFile); //新建一个空白pdf文档
FileOutputStream os = new FileOutputStream(file);
Document doc = new Document(sourcerFile); //sourcerFile是将要被转化的word文档
doc.save(os, SaveFormat.PDF);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
os.close();
long now = System.currentTimeMillis();
System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
} catch (Exception e) {
e.printStackTrace();
}
}
}
至此关于word转pdf的代码已经全部结束了。然后因为我们引用了外部jar,所以项目打jar包的时候需要在pom中做出如下配置:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
<mainClass>com.ruoyi.RuoYiApplication</mainClass>
<includeSystemScope>true</includeSystemScope><!--外部进行打包-->
</configuration>
</plugin>
</plugins>
</build>
<dependency>
<groupId>com</groupId><!--随便填的-->
<artifactId>aspose-words</artifactId><!--jar包名字-->
<version>15.8.0</version><!--版本号-->
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/aspose-words-15.8.0-jdk16.jar</systemPath><!--路径-->
</dependency>
<!--注意:重点是systemPath这个路径必须得是你jar的路径。其他的按照套路填就行,要求不是太严格。${project.basedir}只是一个系统自己的常量,不用管它-->
完结撒花✿✿ヽ(°▽°)ノ✿