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

从iTextSharp迁移至iText7:如何获取PDF文本的字体粗细?

从iTextSharp迁移到iText7:获取字体粗细的正确姿势

我懂你在迁移时遇到的痛点——原来用iTextSharp时靠反射扒私有字段的写法虽然能用,但既不优雅还容易因为内部实现变化出问题。好在iText7的API设计更规范,直接提供了公开方法来获取字体权重,完全不需要绕反射的路子。

先说说原来的问题

你之前的iTextSharp代码通过反射访问fontWeight私有字段,这种写法依赖于库的内部实现细节,一旦库版本更新可能就失效了。而iText7把字体属性都封装成了公开的API,我们可以直接调用。

iText7的解决方案

在iText7中,TextRenderInfo.GetFont()返回的是PdfFont对象,我们可以通过它拿到FontProgram,然后调用GetFontWeight()方法直接获取字体权重值。下面是修改后的代码:

public class MyLocationTextExtractionStrategy : LocationTextExtractionStrategy
{
    public override void RenderText(TextRenderInfo renderInfo)
    {
        // 一定要调用基类的RenderText方法,否则文本提取逻辑会不完整
        base.RenderText(renderInfo);
        
        PdfFont pdfFont = renderInfo.GetFont();
        if (pdfFont == null) return;
        
        FontProgram fontProgram = pdfFont.GetFontProgram();
        int fontWeight = fontProgram.GetFontWeight();
        
        // 这里可以根据需要使用fontWeight值,比如记录日志或做业务判断
        // 常见权重参考:400=常规,700=粗体,取值范围100-900(步长100)
        // Console.WriteLine($"当前文本字体权重:{fontWeight}");
    }
}

补充说明

  • fontWeight的取值符合CSS字体权重标准,从100(极细)到900(极粗),步长为100,其中400是默认常规字重,700是标准粗体。
  • 如果遇到Type0复合字体,GetFontWeight()也会正确返回对应的有效权重,不需要额外处理。
  • 相比于反射写法,这种方式依赖公开API,兼容性和稳定性更强,后续iText7版本更新也不会轻易失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:26:37