iText——如何识别可以打印字符串中所有字符的单一字体?
这是wrt iText 2.1.6 我有一个字符串,其中包含来自不同语言的字符,我想为其选择一种字体(在已注册的字体中),其中包含所有这些字符的字形。如果我已经有一种字体可以显示所有这些字形,我希望避免字符串中的不同子字符串使用不同字体打印的情况 如果没有这样的单一字体,我仍然希望选择一组覆盖字符串中字符的最小字体iText——如何识别可以打印字符串中所有字符的单一字体?,itext,Itext,这是wrt iText 2.1.6 我有一个字符串,其中包含来自不同语言的字符,我想为其选择一种字体(在已注册的字体中),其中包含所有这些字符的字形。如果我已经有一种字体可以显示所有这些字形,我希望避免字符串中的不同子字符串使用不同字体打印的情况 如果没有这样的单一字体,我仍然希望选择一组覆盖字符串中字符的最小字体 我知道FontSelector,但它似乎没有为给定的文本找到一组最小的字体。对的如何做到这一点?iText 2.1.6已过时。请停止使用: 我在一个问题中看到两个问题: 是否有包含所
我知道FontSelector,但它似乎没有为给定的文本找到一组最小的字体。对的如何做到这一点?iText 2.1.6已过时。请停止使用: 我在一个问题中看到两个问题: 是否有包含所有语言的所有字符的字体? 请允许我解释为什么这是不可能的:
- Unicode中有1114112个代码点。并非所有这些代码点都被使用,但不同glyph的可能数量是巨大的
- 简单字体仅包含256个字符(每种字体1个字节),复合字体使用0到65535之间的CID
FontSelector
找不到最小字体集强>
FontSelector
不查找最小字体集。您必须告诉FontSelector
您要使用哪些字体以及使用顺序!假设您有以下代码:
FontSelector selector = new FontSelector();
selector.addFont(font1);
selector.addFont(font2);
selector.addFont(font3);
在这种情况下,FontSelector
将首先查看每个特定图示符的font1
。如果它不在那里,它将查看font2
,等等。。。显然,font1
、font2
和font3
对于同一个字符有不同的标志符号。例如:a、a和a。将使用哪个字形取决于添加字体的顺序
底线:
选择涵盖所有所需字形的各种字体,并将它们添加到
FontSelector
实例中。不要期望找到一种包含所有所需字形的字体。非常感谢,布鲁诺。另一种表达我的问题的方式是:是否有一个类似FontSelector的类试图找到一组最小的字体?实际上我知道FontSelector的行为。定义“最小字体集”;-)如果使用registerDirectories()
,则FontFactory
将爬行可能的字体目录(通常怀疑)。然而:软件无法决定你喜欢哪种字体。例如:一种字体如何知道你是否更喜欢Arial而不是Times Roman(反之亦然)?我的意思是说,最小字体集,如果一种字体足以呈现给定的字符串,请不要使用两种或两种以上的字体。如果输入字符串使用英语和孟加拉语,并且我们在注册目录中有一种字体包含这些字符的字形,请使用该字体,而不是使用一种英语字体和一种孟加拉语字体“这是贪婪还是最优。至于我喜欢哪种字体,我更喜欢用最少的字体来呈现给定的字符串。为了保持一致性,并减少由于字体嵌入而导致的PDF文件大小。顺便说一句,谢谢你给我指出你的授权页面。我意识到这一点并正在努力。目前,只有明智地选择添加到FontSelector
的字体顺序,才能实现字体数量最少。选择“最少”数量的字体需要不同的算法:某种类型的SmartFontSelector
,用于尝试所有组合。实现这一目标所需的CPU时间将随着您添加的字体数量的增加而成倍增加。