更新xhtmlrenderer库后ITextUserAgent构造函数不匹配问题解决
解决ITextUserAgent构造函数参数不匹配问题
更新xhtmlrenderer库后,父类ITextUserAgent的构造函数新增了dotsPerPixel参数,导致子类FileResolvingUserAgent的构造调用报错,以下是几种解决方式:
1. 给子类构造函数新增参数传递
如果需要根据不同场景自定义像素密度,直接给子类构造函数加上dotsPerPixel参数,传递给父类即可:
public FileResolvingUserAgent(final ITextOutputDevice outputDevice, final int dotsPerPixel, final Map<String, Supplier<InputStream>> fileResolvers) { super(outputDevice, dotsPerPixel); this.fileResolvers = fileResolvers; }
后续创建FileResolvingUserAgent实例时,按需传入对应的像素密度值。
2. 使用默认值简化调用
如果不需要自定义,直接传入通用的默认值即可,常见选项:
- 96:大多数屏幕的默认DPI,适合屏幕渲染场景
- 300:打印文档常用的高DPI,保证打印清晰度
示例代码(以96为例):
public FileResolvingUserAgent(final ITextOutputDevice outputDevice, final Map<String, Supplier<InputStream>> fileResolvers) { super(outputDevice, 96); this.fileResolvers = fileResolvers; }
也可以参考父类的配置读取逻辑,从框架配置中获取值,保持和框架默认行为一致:
public FileResolvingUserAgent(final ITextOutputDevice outputDevice, final Map<String, Supplier<InputStream>> fileResolvers) { super(outputDevice, Configuration.valueAsInt("xr.dots-per-pixel", 96)); this.fileResolvers = fileResolvers; }
关于dotsPerPixel的说明
这个参数控制HTML内容渲染时的像素密度:
- 值越高,渲染出的文字、图片边缘越清晰,文件体积也会相应增大
- 如果是生成屏幕显示的内容,用96足够;如果是打印或高清导出,建议用300及以上
- 部分输出设备可能提供自身的DPI信息,也可以从
ITextOutputDevice中尝试获取对应属性来动态设置
内容的提问来源于stack exchange,提问作者maher
相关产品推荐
相关产品推荐

