diff --git a/pom.xml b/pom.xml
index 2d48f2d..15732ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,6 +32,13 @@
spring-boot-starter-test
test
+
+
+
+ com.deepoove
+ poi-tl
+ 1.9.1
+
diff --git a/src/main/java/com/aiprose/word2pdf/PdfUtils.java b/src/main/java/com/aiprose/word2pdf/PdfUtils.java
new file mode 100644
index 0000000..dc180c5
--- /dev/null
+++ b/src/main/java/com/aiprose/word2pdf/PdfUtils.java
@@ -0,0 +1,90 @@
+package com.aiprose.word2pdf;
+
+/**
+ * @author yanpeng
+ * @version 1.0
+ * @desc TODO
+ * @company 北京中经网软件有限公司
+ * @date 2022/3/8 11:47
+ */
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * 依赖libreoffice实现PDF转化
+ * @author Dawn
+ */
+
+public class PdfUtils {
+
+ public static void main(String[] args) {
+ PdfUtils pdfUtils = new PdfUtils();
+ String filepath = "F:/word2pdf/tst.docx";
+ String targetFolder = "F:/word2pdf/";
+ pdfUtils.toPdf(filepath,targetFolder);
+ }
+ /**
+ *
+ * @param filePath 原文件路径 本地路径
+ * @param targetFolder 目标文件夹
+ */
+ @Async
+ public void toPdf(String filePath,String targetFolder){
+ long start=System.currentTimeMillis();
+ String srcPath = filePath, desPath = targetFolder;
+ System.out.println("源文件:"+filePath);
+ System.out.println("目标文件夹:"+targetFolder);
+ String command = "";
+ String osName = System.getProperty("os.name");
+ System.out.println("系统名称:"+osName);
+ if (osName.contains("Windows")) {
+ command = "soffice --headless --convert-to pdf " + srcPath + " --outdir " + desPath;
+ windowExec(command);
+ }else {
+ command = "libreoffice7.0 --convert-to pdf:writer_pdf_Export " + srcPath + " --outdir "+ desPath;
+ LinuxExec(command);
+ }
+ long end=System.currentTimeMillis();
+ System.out.println("转换文件耗时:"+(end-start)+"毫秒");
+ }
+
+
+ private boolean windowExec(String command) {
+ Process process;// Process可以控制该子进程的执行或获取该子进程的信息
+ try {
+ process = Runtime.getRuntime().exec(command);// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。
+ // 下面两个可以获取输入输出流
+ InputStream errorStream = process.getErrorStream();
+ InputStream inputStream = process.getInputStream();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+
+ int exitStatus = 0;
+ try {
+ exitStatus = process.waitFor();// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
+ // 第二种接受返回值的方法
+ int i = process.exitValue(); // 接收执行完毕的返回值
+ } catch (InterruptedException e) {
+ return false;
+ }
+ process.destroy(); // 销毁子进程
+ process = null;
+ return true;
+ }
+
+ private void LinuxExec(String cmd){
+ System.out.println(cmd);
+ try {
+ Runtime.getRuntime().exec(cmd);
+ } catch (IOException e) {
+ System.err.println(e.getMessage());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/tst.docx b/src/main/resources/tst.docx
new file mode 100644
index 0000000..03726ff
Binary files /dev/null and b/src/main/resources/tst.docx differ