仅当语言不受支持时,如何让 FOP 读取外部字体

how do I ask FOP to read external font only when language not supported

众所周知apache FOP不支持日文和中文。为了克服这个问题,我使用了 http://unifoundry.com/unifont/index.html

但是,当使用外部字体时,似乎我必须将它用于所有语言。

我的要求是只有在没有内置语言支持的情况下才能读取外部字体文件。

如何让 FOP 检测和读取外部字体文件而不是打印 ##### 或 ??????在 pdf 中 ?

一种方法是:由于 FOP 在找不到字体时会抛出警告,我能否将此警告转换为异常并在异常时读取外部字体?

字体定义和 selection 完全取决于您以及您如何定义它们。在 XSL FO 中,您可以执行与 CSS 相同的操作,例如:

 <fo:block font-family="Helvetica, Arial, Arial Unicode"> ... </fo:block>

这字面意思是 select 字体 Helvetica 第一,Arial 第二和 Arial Unicode 第三显示我的文本。

您可以将其与整体定义或继承定义相结合,以了解您希望格式化引擎如何 select 要使用的字体。您可以使用默认的 "auto"(换句话说未定义),并且 select 可以显示最多字符的字体列表中的第一个字体。或者您可以将 font-selection-strategy 设置为 character-by-character 以告诉格式化引擎 select 列表中包含每个字符的字符的第一个字体。

不清楚FOP是否支持逐个字符,而且很少使用。只要您的列表包含可以显示每个字符的字体,那么它将始终在要输出的任何文本中逐字使用。

事实上,您可以使用字体列表以及设置您希望如何处理这些字体的策略,这应该能满足您的需求。将列表中的每种字体按重要性降序排列,让格式化引擎完成工作以确保显示所有字符。

您只需要在 FOP 配置中设置所有这些字体。