Itext7 html2PDF 3.0.5 有序列表渲染内容重叠问题求助
有序列表序号与内容重叠问题解决方案
iText7 pdfHTML 3.0.5版本默认的列表边距计算逻辑和旧版XMLWorker存在差异,会导致有序列表序号缩进不足和内容重叠,可通过以下方案解决:
方案1:修改HTML样式(优先推荐)
在HTML的<style>标签中添加以下规则,显式指定列表缩进规则:
ol { /* 多位数序号可调整为3em及以上 */ padding-left: 2.5em; margin-left: 0; } li { padding-left: 0.5em; list-style-position: outside; }
方案2:Java代码注入自定义样式
如果无法修改原HTML内容,可以在转换代码中注入全局默认样式:
import com.itextpdf.html2pdf.ConverterProperties; import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.html2pdf.css.CssResource; import com.itextpdf.html2pdf.css.CssResourceType; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; public static byte[] html2pdf(String htmlString) throws Exception { ByteArrayOutputStream baos = null; try { baos = new ByteArrayOutputStream(); PdfWriter pdfWriter = new PdfWriter(baos); PdfDocument pdfDocument = new PdfDocument(pdfWriter); ConverterProperties converterProperties = new ConverterProperties(); // 注入自定义CSS修复列表缩进 String customListCss = "ol { padding-left: 2.5em; margin-left: 0; } li { padding-left: 0.5em; list-style-position: outside; }"; List<CssResource> cssResources = new ArrayList<>(); cssResources.add(new CssResource(customListCss, CssResourceType.INLINE)); converterProperties.setCssResources(cssResources); HtmlConverter.convertToPdf(htmlString, pdfDocument, converterProperties); pdfDocument.close(); return baos.toByteArray(); } catch (Exception exception) { return null; } finally { try { if (baos != null) { baos.close(); } } catch (Exception ignored) { } } }
方案3:升级组件版本
pdfHTML 3.0.5之后的版本官方已经修复了列表缩进的相关bug,直接升级到4.0及以上版本,无需额外修改代码即可解决大部分重叠问题。
内容的提问来源于stack exchange,提问作者user16753712
相关产品推荐
相关产品推荐

