在node中使用pdfkit.js以任何语言呈现文本

Using pdfkit in node.js to render text in any language

本文关键字:语言 任何 文本 js node pdfkit      更新时间:2023-09-26

我正在使用pdfkit在nodewebkit应用程序中动态生成PDF文档。PDF 包含通过 HTTP 请求来自远程源的用户评论。

的效果非常好,但是现在我发现当评论是日语、中文、阿拉伯语等时,它无法正确呈现,而且我无法知道评论会用什么语言出现——事实上,我是从世界各地收集的。

我明白我需要使用正确的字体,应该包含适当的字符,如此处所述。我发现了这个"google noto"开放字体,它拥有一切,但问题是没有适用于所有语言的单一 TTF 文件,并且不可能有,因为字体文件仅限于 65K 字形。

我正在尝试找到一种解决方案,该解决方案允许使用 pdfkit 在 PDF 中(几乎)以任何语言呈现文本,而无需编写复杂的语言识别工具,我认为这是一种矫枉过正。

任何想法和建议将不胜感激。

更新:使用pdfkit作者的字体管理器来替换字体。另外,您可能还想尝试phantomJS——不过我还没有这样做。如果您有相同的问题,请参阅评论中@levi的详细回复。希望对您有所帮助。

这里有一个想法。下载最流行语言的所有字体。将它们添加到列表中,并按最受欢迎的方式进行排序。对于每个注释,获取字符串中 n 个随机字符的 unicode 值。对于每个字符,如果代码> 127(ASCII 范围)注释可能不是英语。使用 opentype.js ,逐个解析字体文件,对于每种字体,检查 cmap 表是否存在所有采样字符代码的字形。如果有,则选择该字体,并在 unicode 代码到字体之间缓存映射。否则,请尝试下一个字体。

经过进一步考虑,似乎TTF文件通过UnicodeRange字段提供了有关它们支持的Unicode范围的信息。因此,也许您可以在每种字体和它支持的 unicode 范围之间构建一个映射,并使用它来选择正确的字体,而不是在运行时解析每种字体。

相关文章: