使用iText7 pdfhtml转换SVG为PDF时样式异常及中文不显示求助
iText7转换SVG为PDF时颜色反转及中文显示问题解决方案
颜色反转问题排查
- 检查SVG滤镜:如果SVG中包含
invert类颜色反转滤镜(如<filter>标签定义的颜色反转逻辑),iText7的SVG解析器对这类滤镜的处理可能存在偏差,建议直接移除该滤镜或调整滤镜参数。 - 统一颜色模式:若SVG使用CMYK颜色模式,转换为PDF时可能因颜色空间不匹配出现反转,可将SVG中所有颜色值替换为RGB格式(例如用
#000000替代cmyk(0,0,0,1))。 - 临时修复方案:若无法修改SVG源文件,可在PDF生成后通过iText7的内容编辑API遍历页面元素,手动反转指定图形的颜色属性。
中文显示问题修复
- 匹配字体族名称:SVG中文本元素的
font-family属性必须与你添加的字体名称完全一致(比如SVG中要写font-family:"HYWenHei-75W"),否则iText会使用默认字体,导致中文无法渲染。 - 验证字体加载:先确认字体文件路径正确,可通过以下代码测试字体是否能正常读取:
FontProgram fontProgram = FontProgramFactory.createFont("/font/HYWenHei-75W.ttf"); System.out.println("字体名称:" + fontProgram.getFontNames().getFontName());
- 优化流管理:使用try-with-resources确保文件流正确关闭,避免资源加载异常,优化代码如下:
try (FileInputStream svgInput = new FileInputStream("test.svg"); FileOutputStream pdfOutput = new FileOutputStream("test.pdf")) { SvgConverterProperties prop = new SvgConverterProperties(); FontProvider fontProvider = new FontProvider(); PdfFont pdfFont = PdfFontFactory.createFont("/font/HYWenHei-75W.ttf", PdfEncodings.IDENTITY_H); fontProvider.addFont(pdfFont.getFontProgram()); prop.setFontProvider(fontProvider); SvgConverter.createPdf(svgInput, pdfOutput, prop); } catch (IOException e) { e.printStackTrace(); }
后续处理建议
- 升级iText7版本:旧版本的SVG模块存在已知兼容性问题,升级到最新稳定版大概率能解决部分异常。
- 提交官方Bug反馈:若以上方法均无效,可整理SVG文件、代码示例及问题描述,提交至iText7官方代码仓库,开发者会评估是否为需要修复的Bug并纳入更新计划。
内容的提问来源于stack exchange,提问作者李当心
相关产品推荐
相关产品推荐

