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

使用PDFBox 3.0.0 alpha3转TXT为PDF时遇运行时异常求助

解决方案:TXT转PDF时的日志初始化错误与模块解析冲突处理

一、核心问题根源

  1. ExceptionInInitializerError(日志未初始化):Apache PDF处理组件(如PDFBox)依赖commons-logging实现日志输出,项目缺少该依赖导致类初始化失败。
  2. ResolutionException(模块解析冲突):手动添加commons-logging-1.2.jar后,与JDK9+模块化系统冲突——commons-logging属于未模块化的Jar,易和JDK内置日志模块或其他依赖模块产生兼容性问题。

二、分步解决

1. 替换依赖,规避模块化冲突

放弃手动添加commons-logging-1.2.jar,改用SLF4J作为日志桥接方案,适配模块化环境:

  • Maven/Gradle管理依赖(以Maven为例):
    <!-- SLF4J核心API -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>
    <!-- 桥接commons-logging到SLF4J,替代原commons-logging依赖 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>2.0.9</version>
    </dependency>
    <!-- 可选:添加简单日志实现用于测试 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>2.0.9</version>
        <scope>test</scope>
    </dependency>
    
  • 手动管理Jar包:下载对应版本的slf4j-api.jar、jcl-over-slf4j.jar,替换原commons-logging-1.2.jar。

2. 模块化项目额外配置(JDK9+)

若项目为模块化(含module-info.java),需在模块声明中添加依赖:

module your.module.name {
    requires org.slf4j;
    requires org.slf4j.jcl.over.slf4j;
    // 同时添加Apache PDF组件的模块依赖,例如:
    requires org.apache.pdfbox;
}

3. 验证日志初始化

在代码启动阶段添加日志初始化验证,确保日志系统正常加载:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TxtToPdfConverter {
    private static final Logger logger = LoggerFactory.getLogger(TxtToPdfConverter.class);

    public static void main(String[] args) {
        logger.info("日志系统初始化完成");
        // 你的TXT转PDF业务逻辑
    }
}

4. 排查并清理重复依赖

若仍有冲突,检查项目中是否存在重复日志依赖:

  • 用Maven命令查看依赖树,定位重复依赖:
    mvn dependency:tree
    
  • 排除冲突依赖,例如在PDFBox依赖中移除commons-logging:
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.32</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

三、替代方案:使用轻量PDF库

若上述配置仍有问题,可尝试无冗余日志依赖的OpenPDF(iText开源分支):

<dependency>
    <groupId>com.github.librepdf</groupId>
    <artifactId>openpdf</artifactId>
    <version>1.3.30</version>
</dependency>

内容的提问来源于stack exchange,提问作者Mahdad Zarafshan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:52:48