Java实现word转PDF

使用 aspose-words 进行转换

方案一:

xml 复制代码
<dependency>
  <groupId>com.aspose</groupId>
  <artifactId>aspose-words</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/src/main/resources/aspose-words-15.8.0-jdk16.jar</systemPath>
</dependency>

因为 aspose-words-15.8.0-jdk16.jar 从中央仓库拉取不到,所以从固定位置加载(如果能拉取到就直接指定),其中
system 表示这个依赖项将从本地文件系统的一个具体位置加载,而不是从Maven中央仓库或其他远程仓库。
systemPath 指定了JAR文件在本地系统上的确切路径。

方案二:

xml 复制代码
<dependency>
  <groupId>com.luhuiguo</groupId>
  <artifactId>aspose-words</artifactId>
  <version>22.10</version>
</dependency>

这个中央仓库能拉取到

代码实现:

java 复制代码
public void exportFile() {
    // wordPath 表示word文档地址
    String wordPath = "E:\IdeaProjects\files\download\cesdata.docx";
    File file = new File(wordPath);
    // 获取文件数据
    byte[] fileData = getFileData(wordPath);
    // pdfPath 表示PDF输出地址
    String pdfPath = "E:\IdeaProjects\files\download\cesdata.pdf";

    // 使用方案一需要设置license,不设置会有水印(方案二测试不设置也不会有水印,加上也行)
    String s = "<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>";
    ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
    License license = new License();
    license.setLicense(is);

    // 导出文件
    try (InputStream inputStream = new ByteArrayInputStream(fileData)) {
        com.aspose.words.Document document = new com.aspose.words.Document(inputStream);
        document.save(Files.newOutputStream(new File(pdfPath).toPath()), SaveFormat.PDF);
    }
}
java 复制代码
// 获取文件数据
public byte[] getFileData(String filePath) {
    try (FileInputStream fis = new FileInputStream(filePath);
         ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
        byte[] buffer = new byte[1024];
        int length;
        while ((length = fis.read(buffer)) != -1) {
            bos.write(buffer, 0, length);
        }
        return bos.toByteArray();
    } catch (Exception err) {
        return null;
    }
}
相关推荐
weixin_4935036722 分钟前
Vue3 前端生成 PDF:会员证书与活动签到表的三种打印方案与踩坑记录
前端·pdf·状态模式
yxlalm1 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风2 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
Seoyoneh2 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人2 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
tryxr3 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei3 小时前
Java 写 Agent:模型只是组件
java·开发语言
彧azz4 小时前
Java学习语法篇:变量
java·学习
信誓旦旦的程序猿5 小时前
【量化系统从零构建 #04】存储设计:选型·建库·交易日历
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
yurenpai(27届找实习中)5 小时前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18