You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JODConverter将RTF转PDF时遇空指针及类缺失问题

问题1:空指针异常(未初始化DocumentConverter)

原因

你的JODRTFtoPDF类中documentConverter变量仅声明但未初始化,调用convert方法时触发空指针异常。

解决方案

结合LocalOfficeManager完成DocumentConverter的初始化,同时管理Office服务的启动与关闭,修改后的完整代码如下:

package isc.libreoffice;

import org.jodconverter.core.DocumentConverter;
import org.jodconverter.core.office.OfficeException;
import org.jodconverter.local.LocalConverter;
import org.jodconverter.local.office.LocalOfficeManager;

import java.io.File;

public class JODRTFtoPDF {

    private DocumentConverter documentConverter;
    private LocalOfficeManager officeManager;

    // 构造方法中完成初始化
    public JODRTFtoPDF() {
        // 安装并初始化本地Office管理器
        officeManager = LocalOfficeManager.install();
        try {
            officeManager.start();
            // 通过Office管理器创建DocumentConverter实例
            documentConverter = LocalConverter.make(officeManager);
        } catch (OfficeException e) {
            throw new RuntimeException("初始化Office服务或转换器失败", e);
        }
    }

    public String rtfToPdf(String filePath) {
        return rtfToPdf(filePath, null);
    }

    public String rtfToPdf(String filePath, String outputFilePath) {
        if (outputFilePath == null) {
            outputFilePath = filePath.substring(0, filePath.lastIndexOf(".")) + ".pdf";
        }

        try {
            documentConverter.convert(new File(filePath)).to(new File(outputFilePath)).execute();
        } catch (OfficeException e) {
            throw new RuntimeException("RTF转PDF失败", e);
        }

        return outputFilePath;
    }

    // 提供关闭方法,释放Office资源
    public void shutdown() {
        if (officeManager != null) {
            org.jodconverter.core.office.OfficeUtils.stopQuietly(officeManager);
        }
    }
}

使用时需在程序结束前调用shutdown()方法关闭Office服务,避免资源泄漏。


问题2:ClassNotFoundException: org.slf4j.LoggerFactory

原因

JODConverter依赖SLF4J作为日志框架,你的项目中缺少SLF4J的核心API或日志实现依赖,导致类加载失败。

解决方案

根据项目构建工具添加对应的依赖:

Maven项目

在pom.xml中添加以下依赖:

<!-- SLF4J核心API -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
</dependency>
<!-- Logback日志实现(可选,也可替换为其他SLF4J兼容的日志框架) -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>

Gradle项目

在build.gradle中添加:

implementation 'org.slf4j:slf4j-api:1.7.36'
implementation 'ch.qos.logback:logback-classic:1.2.11'

手动管理Jar包

如果不使用构建工具,需下载slf4j-api.jar和logback-classic.jar(或其他SLF4J实现Jar),放入项目的classpath目录中。


内容的提问来源于stack exchange,提问作者Gevorg Arutiunian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:18:18