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

使用itext7实现HTML转PDF时字体失效、布局错乱问题求助

iText7 pdfHTML 转换问题修复方案

字体不生效、样式被覆盖问题修复

你现有配置存在3处导致字体匹配失败的问题:

  • CSS属性书写错误:span.header样式中font-style:bold是无效配置,bold属于font-weight的取值范围,font-style仅支持normal/italic/oblique三类取值,该错误会导致iText匹配字体时无法命中Comic Sans MS,直接 fallback 到第一个注册的Arial字体。修改对应CSS规则:
span.header     {font-size:32pt; font-family:Comic Sans MS; font-weight:bold; border:0; margin:0; padding:0 0 0 0; color:#000000;}
  • 字体编码配置不合理:你当前使用Winansi编码注册字体,仅支持西欧字符,若HTML中存在中文、特殊符号等非西欧字符,会直接触发字体 fallback。建议修改为Identity-H编码适配全字符集:
import com.itextpdf.kernel.pdf.PdfEncodings;

// 修改字体注册逻辑
fontProvider.addFont(fontProgram1, PdfEncodings.IDENTITY_H);
fontProvider.addFont(fontProgram2, PdfEncodings.IDENTITY_H);
fontProvider.addFont(fontProgram3, PdfEncodings.IDENTITY_H);
  • 字体名称匹配校验:部分字体文件内部定义的字体名和文件名不一致,可调用fontProgram3.getFontNames().getFontName()打印Comic Sans MS字体的实际内部名称,确保和CSS中font-family的取值完全一致(大小写也需匹配)。

布局错乱、内容分页丢失问题修复

  • 你未指定PDF页面尺寸和边距,默认A4页面的默认边距如果和HTML布局宽度不匹配,会导致内容溢出拆分甚至丢失。可直接在HTML的CSS中添加页面规则和溢出适配规则:
@page {
  size: A4 portrait;
  margin: 20px; /* 可根据需求调整边距 */
}
* {
  overflow-wrap: break-word;
  max-width: 100%;
  box-sizing: border-box;
}
  • 若仍存在内容截断问题,可在初始化PdfDocument时显式指定页面尺寸:
PdfDocument pdf = new PdfDocument(writer);
pdf.setDefaultPageSize(PageSize.A4);

内容的提问来源于stack exchange,提问作者Isha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:57:02