阅读量:10
1.场景
不知大家有没有注意到,在开发工作中,我们或多或少都会接触到文档,不管是开发文档,还是用户手册,都会跟文件打交道,对于使用系统的用户来说,文件要下载再打开会比较繁琐,而且会比较耗磁盘空间,很多时候用户直观地想预览这个文件,Word不支持预览,这个就需要将Word转换为PDF格式才能进行预览,但市面上很多转换的都是商业软件,但这拦不到一个想搞技术的程序猿,在此我分享一个我常用的Word转PDF的方法,希望对你们有用。
2.环境准备
这提供几个转换的Jar包,用来转换pdf的(我使用的是springboot框架,因此用上了Maven仓库,把jar包已经导入了Maven仓库,在下面我会将jar导入到Maven中的命令写出来)
<dependency> <groupId>aspose</groupId> <artifactId>aspose-words</artifactId> <version>15.8.0-jdk16</version> </dependency> <dependency> <groupId>aspose</groupId> <artifactId>aspose-slides</artifactId> <version>19.3</version> </dependency>
jar包的网盘链接和提取码
链接:https://pan.baidu.com/s/1J1BPC7J5_KG_OEx8w98V2w?pwd=7284 提取码:7284 --来自百度网盘超级会员V6的分享
如何将jar包导入本地Maven仓库,命令如下:
mvn install:install-file -Dfile=刚下载的jar包的位置 -DgroupId=依赖里写的groupId -DartifactId=依赖里写的artifactId -Dversion=上面的version -Dpackaging=jar 示例: mvn install:install-file -Dfile=F:\项目\文件预览\lib\aspose-words-15.8.0-jdk16.jar -DgroupId=aspose -DartifactId=aspose-words -Dversion=15.8.0-jdk16 -Dpackaging=jar
准备工作已完成,开始上代码。
3.项目代码
引入springboot依赖和aspose依赖:
<dependency> <groupId>aspose</groupId> <artifactId>aspose-words</artifactId> <version>15.8.0-jdk16</version> </dependency> <dependency> <groupId>aspose</groupId> <artifactId>aspose-slides</artifactId> <version>19.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
创建一个工具类,封装word转pdf的操作方法,业务代码去调用这个接口即可:
import com.aspose.words.Document; import com.aspose.words.License; import com.aspose.words.SaveFormat; import java.io.*; /** * word转pdf工具类 * * @author shmily */ public class Word2PdfUtil { /** * 许可证字符串(可以放到resource下的xml文件中也可) */ private static final String LICENSE = "<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>"; /** * 设置 license 去除水印 */ private static void setLicense() { ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(LICENSE.getBytes()); License license = new License(); try { license.setLicense(byteArrayInputStream); } catch (Exception e) { e.printStackTrace(); } } /** * word 转 pdf 生成至指定路径,pdf为空则上传至word同级目录 * * @param wordPath word文件路径 * @param pdfPath pdf文件路径 */ public static void wordConvertPdfFile(String wordPath, String pdfPath) { FileOutputStream fileOutputStream = null; try { pdfPath = pdfPath == null ? getPdfFilePath(wordPath) : pdfPath; setLicense(); File file = new File(pdfPath); fileOutputStream = new FileOutputStream(file); Document doc = new Document(wordPath); doc.save(fileOutputStream, SaveFormat.PDF); } catch (Exception e) { e.printStackTrace(); } finally { try { assert fileOutputStream != null; fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * word 转 pdf 生成byte字节流 * * @param wordPath word所在的目录地址 * @return */ public static byte[] wordConvertPdfByte(String wordPath) { ByteArrayOutputStream fileOutputStream = null; try { setLicense(); fileOutputStream = new ByteArrayOutputStream(); Document doc = new Document(wordPath); doc.save(fileOutputStream, SaveFormat.PDF); return fileOutputStream.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { assert fileOutputStream != null; fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } /** * 获取 生成的 pdf 文件路径,默认与源文件同一目录 * * @param wordPath word文件 * @return 生成的 pdf 文件 */ private static String getPdfFilePath(String wordPath) { int lastIndexOfPoint = wordPath.lastIndexOf("."); String pdfFilePath = ""; if (lastIndexOfPoint > -1) { pdfFilePath = wordPath.substring(0, lastIndexOfPoint); } return pdfFilePath + ".pdf"; } }
调用这个工具的方法,将word转换为pdf,以下是示例代码:
import alp.starcode.utils.Word2PdfUtil; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class FileController { @GetMapping("word2Pdf") public void word2Pdf() { Word2PdfUtil.wordConvertPdfFile("D:\\code\\pdf\\word.docx","D:\\code\\pdf\\success.pdf"); } @GetMapping("word2PdfByte") public byte[] word2PdfByte() { return Word2PdfUtil.wordConvertPdfByte("D:\\code\\pdf\\word.docx"); } }
下图是转换后的效果
word文件转pdf文件完成,后续将更新excel转pdf示例。