【发布时间】:2011-05-27 07:47:25
【问题描述】:
我需要在 iText 中做这样的事情:
Font fuente=new Font(Font.getFamily("ARIAL"),30,Font.BOLD);
但我需要在段落上使用 TIMES NEW ROMAN 字体,而不是使用 ARIAL 字体。 我怎么能做到这一点?
谢谢。
【问题讨论】:
我需要在 iText 中做这样的事情:
Font fuente=new Font(Font.getFamily("ARIAL"),30,Font.BOLD);
但我需要在段落上使用 TIMES NEW ROMAN 字体,而不是使用 ARIAL 字体。 我怎么能做到这一点?
谢谢。
【问题讨论】:
你有问题。
Font.getFamily(string) 仅适用于“Base 14”字体、Helvetica、Times Roman、Courier(以及它们的粗体和斜体变体),以及 Symbol 和 ZapfDingbats。询问除其中一种字体之外的任何内容都会返回 FontFamily.UNDEFINED。
您的代码没有按照您认为的方式运行。如果您碰巧使用 Arial,那只是因为它是默认字体。
你想要的是FontFactory.getFont(...)。在 FontFactory 可以按名称返回给定字体之前,您需要注册该字体的文件。最简单的方法是调用FontFactory.registerDirectories(),它将枚举所有已知操作系统用于存储字体并注册在那里找到的所有字体的目录。这将花费更长的时间,具体取决于您有多少字体以及这些字体有多大。很多 CJKV 字体将花费大量时间来注册……可能在 30 秒以下,但我的系统野兽可能需要 10-20 秒才能完成(但我有很多大字体)。
您还可以使用FontFactory.register(fontPath) 注册单个文件,但这要求您首先知道在哪里可以找到它们。
无论如何,您的代码可能是这样的:
FontFactory.registerDirectories();
Font fuente = FontFactory.getFont("Times New Roman");
而且 FontFactory 在查找字体时确实会忽略大小写。 Font.getFamily() 没有。
【讨论】: