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

如何解决iText 5中HtmlPipelineContext构造函数的非法反射访问问题?

解决iTextPDF 5.5.13.3在JDK11下的非法反射访问警告及调试异常

上下文

  • JDK11
  • SpringBoot
  • iTextPDF 5.5.13.3
  • Ubuntu
  • Eclipse

问题场景

执行new HtmlPipelineContext(null);、new CssAppliersImpl(new XMLWorkerFontProvider());以及自定义实现CssAppliersImpl(内部包含Map构建逻辑)时,控制台输出以下警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.itextpdf.text.io.ByteBufferRandomAccessSource$1 (file:/home/awieclawski/.m2/repository/com/itextpdf/itextpdf/5.5.13.3/itextpdf-5.5.13.3.jar) to method java.nio.DirectByteBuffer.cleaner()
WARNING: Please consider reporting this to the maintainers of com.itextpdf.text.io.ByteBufferRandomAccessSource$1

同时调试new HtmlPipelineContext(null);时,触发异常:com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred invoking method.

前置代码

创建HtmlPipelineContext实例前的代码如下:

CSSResolver cssResolver = new StyleAttrCSSResolver();
cssResolver.addCss(cssFile);
//     cssFile 由 XMLWorkerHelper.getCSS(getCssStream(path)) 返回
}

解决方案

问题出在FontFactoryImp类的第503行,该行调用了静态方法BaseFont.enumerateTTCNames(path);。只需在实例化XMLWorkerFontProvider时传入XMLWorkerFontProvider.DONTLOOKFORFONTS参数,即可解决所有问题:

XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); 

修改后执行,上述警告和调试异常均已消失。

内容的提问来源于stack exchange,提问作者Andrzej Więcławski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:05:15