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

Scala项目使用iText PDF:ImageResource与ITextFSImage类型不匹配错误

问题

在Scala项目中使用iText库生成PDF,自定义了继承ITextUserAgent的ElabUserAgent类。调用Image.getInstance创建ImageResource时,将com.itextpdf.text.Image对象传入ITextFSImage构造方法出现类型不匹配错误,报错信息如下:

Class com.lowagie.text.Image not found - continuing with a stub.
[error] val fsImage = new ITextFSImage(itextImage)

简化后的代码如下:

import com.itextpdf.text.Image
import org.xhtmlrenderer.pdf.ITextFSImage
import org.xhtmlrenderer.pdf.ITextOutputDevice
import org.xhtmlrenderer.pdf.ITextUserAgent
import org.apache.commons.io.IOUtils
import org.xhtmlrenderer.pdf._
import org.xhtmlrenderer.resource.ImageResource
import org.xhtmlrenderer.resource.XMLResource
import play.api.Environment
import play.api.Logger
import play.api.mvc.Result
import play.api.mvc.Results
import play.twirl.api.Html

private class ElabUserAgent(
  environment: Environment,
  logger: Logger,
  outputDevice: ITextOutputDevice,
) extends ITextUserAgent(outputDevice) {

  override def getImageResource(uri: String): ImageResource =
    environment
      .resourceAsStream(uri)
      .map { stream =>
        val itextImage = Image.getInstance(IOUtils.toByteArray(stream))
        val fsImage = new ITextFSImage(itextImage) 
        new ImageResource(fsImage)
      }
      .getOrElse {
        logger.error(s"Could not find '${uri}' while generating PDF")
        super.getImageResource(uri)
      }
}
解决方案
  • 对齐依赖版本:核心问题是xhtmlrenderer(即Flying Saucer)与iText的版本不兼容。早期iText的包名为com.lowagie.text,后来升级后改为com.itextpdf.text,而你使用的ITextFSImage可能依赖旧版iText的类。
    • 如果使用新版Flying Saucer,确保引入的是适配iText 5+的依赖(如org.xhtmlrenderer:flying-saucer-pdf-itext5),而非依赖旧版lowagie的flying-saucer-pdf。
    • 若必须使用旧版Flying Saucer,则需要将iText依赖换回低版本(包名com.lowagie.text),并修改代码中的导入语句。
  • 修正导入类:如果确认依赖版本兼容,检查ITextFSImage构造方法要求的参数类型。如果它需要com.lowagie.text.Image,则将代码中的导入从com.itextpdf.text.Image改为com.lowagie.text.Image,同时调整项目依赖的iText版本。
  • 适配类转换:若无法更换依赖版本,可尝试将com.itextpdf.text.Image实例转换为com.lowagie.text.Image,但这种方式不推荐,容易引发其他兼容性问题,优先选择版本对齐方案。

内容的提问来源于stack exchange,提问作者miraoui.bob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:30:05