You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iText 7中替代iText5 FontSelector.Process的等效机制是什么?

iText7 中替代 FontSelector 的方案

嘿,我来帮你梳理下iText7里替代iText5中FontSelector的方案,完全能实现你需要的自动匹配字体并生成可添加到文档的格式化文本功能!

核心实现方式

在iText7里没有直接和FontSelector同名的类,但有两种主流方式实现类似逻辑:

1. 利用字体Fallback机制(推荐)

这是最省心的方式,iText7支持通过FontSet管理多个备选字体,创建的字体会自动为不同字符匹配合适的字体文件,和FontSelector.Process()的核心逻辑一致:

// 初始化字体集合,添加需要的备选字体
FontSet fontSet = new FontSet();
fontSet.AddFont("Arial.ttf"); // 英文字体
fontSet.AddFont("simsun.ttc,0"); // 中文字体(宋体)

// 创建带Fallback的字体,自动匹配字符对应的字体
PdfFont autoMatchFont = PdfFontFactory.CreateFont(fontSet, PdfEncodings.IDENTITY_H, true);

// 生成文本元素,直接使用这个字体即可
Text mixedText = new Text("Hello 你好,这是混合语言文本")
    .SetFont(autoMatchFont);
Paragraph para = new Paragraph().Add(mixedText);

// 添加到文档
document.Add(para);

2. 手动控制字体选择(精细场景)

如果你需要更精准的控制,比如自定义字符匹配规则,可以手动遍历文本字符,为每个字符段选择对应字体,拼接成Paragraph,效果和FontSelector.Process()返回Chunk集合类似:

// 先加载需要的字体
PdfFont englishFont = PdfFontFactory.CreateFont("Arial.ttf", PdfEncodings.IDENTITY_H);
PdfFont chineseFont = PdfFontFactory.CreateFont("simsun.ttc,0", PdfEncodings.IDENTITY_H);

string content = "Hello 你好,Welcome to iText7世界";
Paragraph para = new Paragraph();

foreach (char c in content)
{
    // 自定义判断逻辑,这里以中文字符为例
    PdfFont selectedFont = IsChineseCharacter(c) ? chineseFont : englishFont;
    para.Add(new Text(c.ToString()).SetFont(selectedFont));
}

document.Add(para);

// 辅助判断方法
private bool IsChineseCharacter(char c)
{
    return c >= 0x4E00 && c <= 0x9FFF;
}

和iText5 FontSelector的区别

iText7的设计更偏向于基于元素(TextParagraph)的组合,不像iText5那样直接返回Chunk列表,但实现的核心效果是一致的,而且iText7的字体处理性能、对多语言字符的支持更出色。

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

火山引擎 最新活动