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