Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iText——如何识别可以打印字符串中所有字符的单一字体?_Itext - Fatal编程技术网

iText——如何识别可以打印字符串中所有字符的单一字体?

iText——如何识别可以打印字符串中所有字符的单一字体?,itext,Itext,这是wrt iText 2.1.6 我有一个字符串,其中包含来自不同语言的字符,我想为其选择一种字体(在已注册的字体中),其中包含所有这些字符的字形。如果我已经有一种字体可以显示所有这些字形,我希望避免字符串中的不同子字符串使用不同字体打印的情况 如果没有这样的单一字体,我仍然希望选择一组覆盖字符串中字符的最小字体 我知道FontSelector,但它似乎没有为给定的文本找到一组最小的字体。对的如何做到这一点?iText 2.1.6已过时。请停止使用: 我在一个问题中看到两个问题: 是否有包含所

这是wrt iText 2.1.6

我有一个字符串,其中包含来自不同语言的字符,我想为其选择一种字体(在已注册的字体中),其中包含所有这些字符的字形。如果我已经有一种字体可以显示所有这些字形,我希望避免字符串中的不同子字符串使用不同字体打印的情况

如果没有这样的单一字体,我仍然希望选择一组覆盖字符串中字符的最小字体


我知道FontSelector,但它似乎没有为给定的文本找到一组最小的字体。对的如何做到这一点?

iText 2.1.6已过时。请停止使用:

我在一个问题中看到两个问题:

是否有包含所有语言的所有字符的字体?

请允许我解释为什么这是不可能的:

  • Unicode中有1114112个代码点。并非所有这些代码点都被使用,但不同glyph的可能数量是巨大的
  • 简单字体仅包含256个字符(每种字体1个字节),复合字体使用0到65535之间的CID
65535比1114112小得多,这意味着在技术上不可能有一个包含所有可能字形的单一字体

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时间将随着您添加的字体数量的增加而成倍增加。