Itext html2pdf转换PDF时SVG外部CSS样式不生效问题求助
iText html2pdf外部CSS样式无法作用于SVG的问题解决
问题原因
iText html2pdf默认对SVG元素的CSS处理逻辑和普通HTML元素不同,外部样式表中的规则不会自动应用到SVG元素上。这是因为SVG被当作独立的XML文档结构处理,默认的CSS解析器不会将外部HTML样式表的规则映射到SVG的属性(比如fill、width这类SVG专属属性),必须通过专门的CSS应用器来启用样式继承。
解决方法
通过配置ConverterProperties,为SVG元素指定专门的CSS应用器,让外部样式表规则能作用于SVG。修改后的Kotlin代码如下:
val dir = createPDFReportDirectory() val pdfFile = File(dir, "$name.pdf").apply { createNewFile() } val pdfWriter = PdfWriter("$dir/$name.pdf") val pdfDocument = com.itextpdf.kernel.pdf.PdfDocument(pdfWriter) // 创建转换配置实例 val converterProperties = ConverterProperties() // 自定义CSS应用工厂,为SVG标签指定专用的CSS应用器 converterProperties.setCssApplierFactory(object : DefaultCssApplierFactory() { override fun getCssApplier(tag: ITag): ICssApplier { return if (TagConstants.SVG == tag.name) { SvgCssApplier() } else { super.getCssApplier(tag) } } }) val inputStream = ByteArrayInputStream(html.toByteArray()) // 传入配置完成转换 HtmlConverter.convertToPdf(inputStream, pdfDocument, converterProperties)
代码说明
ConverterProperties:用于配置html2pdf的转换规则,涵盖CSS解析、标签处理等核心行为。DefaultCssApplierFactory:默认的CSS应用工厂,我们通过重写getCssApplier方法,为svg标签指定SvgCssApplier——这是iText中专门处理SVG元素CSS的类,能将外部样式表中的规则正确映射到SVG的属性上。
内容的提问来源于stack exchange,提问作者Marine Droit
相关产品推荐
相关产品推荐

