我看到iText支持基于单个字形的自动字体选择。这可以通过搜索特定字形的FontSelector
中包含的字体库来实现,如果在列表中更高的字体库中不存在,则从不同的字体库中选择一个字符。
我已经能够在Jasper中配置字体扩展,以通过选择大型unicode字体库来支持亚洲和拉丁字符集,例如“Arial Unicode MS”,它具有超级全面的字符集。然而,像这样的好看的图书馆将受到昂贵的许可!考虑到所涉及的工作量,这并不奇怪......任何支持中文和拉丁语的单一免费字体库通常都是为了满足有效的汉字渲染而产生的,因此拉丁字符的美丽受到影响;)
最后一个问题:是否有一种机制可以在jasper中使用iText的自动字体选择功能?
答案 0 :(得分:-1)
据我理解;您希望使用用户自己的字体而不是在您的应用程序中提供“Arial Unicode MS”。
public class FontList extends ArrayList<String>
{
public FontList()
{
for (final String fontName : GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames())
{
final Font f = new Font(fontName, Font.PLAIN, 10);
//first character in CJK area
if (f.canDisplay('\u4E00'))
{
add(fontName);
}
}
}
}
新的FontList将为您提供包含中文,日文和韩文所有可用字体的列表。
您需要更多逻辑来“自动”选择“最佳”字体;你可以在它的名字中寻找“Arial”,以赋予它更高的优先级。 “Ume”和“WenQuanYi”以及最后的“Dialog”
也许最好让用户选择使用哪一个。如果没有可用的字体,请提供有关如何安装字体e.g.的建议。