springboot工程word转pdf并打jar包完全版攻略,支持linux

一、说明

有两种方法,第一种方法非常简便,是利用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如图所示:
springboot工程word转pdf并打jar包完全版攻略,支持linux_第1张图片
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}只是一个系统自己的常量,不用管它-->

完结撒花✿✿ヽ(°▽°)ノ✿

你可能感兴趣的:(java,java)