如何确保我的 pdf 生成应用程序支持尽可能多的语言字体?

How do I ensure my pdf-generating application supports as many language fonts as possible?

我正在开发一个基于用户输入生成 PDF 的应用程序。用户输入之一是该国本地文字的外国邮政地址,可能是任何内容。我知道我不能支持所有可能的字形,但我想尽可能多地涵盖。我现在的计划是:

  1. 找到一种 'default' 字体来处理更简单的语言(从左到右的 langs,几乎没有像大多数拉丁字母、西里尔字母、希腊字母那样的字形)。我在想 Ubuntu 字体,因为它有一个非常自由的许可
  2. 为常见 languages/language 集(如 CJK、阿拉伯语)查找字体。
  3. 当我需要向 pdf 添加文本时,我尝试在我的集合中找到一种可以处理字符串中所有代码点的字体,从默认值开始。

这听起来合理吗,还是有更简单的方法?是否有我应该支持的前 N ​​languages/writing 个系统的列表?

我也想知道网络浏览器如何在正确显示任何语言方面做得如此出色(我已经有一段时间没有看到 'tofu' 未知代码点的字符了。)

根据您的应用程序有多大,您可以查看 Noto,这将 "support all languages with a harmonious look and feel." 但请注意,涵盖 每个 写作地球上的系统至少需要 1 GB 的字体。

浏览器依靠操作系统提供的不同后备字体来支持多种书写系统 ("languages")。累死了才会看到豆腐

Does that sound like a reasonable thing to do, or is there an easier way?

基本上第 1 项和第 2 项加在一起意味着 "collect enough fonts to cover a large enough portion of the Unicode code points"。这显然是必要的。

正如@RoelN 在他的回答中提到的,Noto 可能是一组要考虑的字体。

不过,第 3 项

When I need to add text to a pdf, I try to find a font in my set that can handle all the codepoints in the string, starting with the default.

没有意义。当然,如果有这样一个字体,你可以使用它。但是如果没有呢?

所以我建议不要指望这种字体的存在,而是将你的字符串分成子字符串,每个子字符串由你列表中的一种字体覆盖的字符组成,然后分段绘制你的完整字符串,改变片与片之间的字体。

很可能您不仅需要按字体拆分字符串,还需要按方向(RTL 与 LTR)拆分字符串,至少在中间步骤中是这样。

Is there a list of top N languages/writing systems I should be supporting?

应该报告哪种语言系统,这显然取决于您的用例。由于您希望 尽可能多地覆盖 ,您可能应该简单地从像 Noto 这样的字体系列开始,并在您的应用程序记录某个字符的查找失败时适当地扩展您的字体列表。