我正在使用
@react-pdf/renderer
和 pdf-lib,
等库在项目中生成 PDF,并且我在多语言文本的字体兼容性方面遇到了重大挑战。在我的用例中,PDF 的部分内容可能包含语言 A(例如韩语)的内容,而其他部分则包含语言 B(例如英语)的内容。我尝试过使用 Helvetica、Roboto 和 Noto 等字体,但来自不同语言或脚本的某些字符要么无法渲染,要么导致字形不准确。
此外,即使 PDF 正确呈现文本,将内容复制并粘贴到其他位置通常也会导致乱码,这可能是由于字形不匹配或 Unicode 编码不正确造成的。这个问题变得特别成问题,因为文本内容是从后端 API 动态获取的,其中消息被迭代以构建 PDF。
我正在寻找一种字体的解决方案或推荐,该字体可以无缝处理多语言文本(包括韩语、中文、日语、阿拉伯语和印地语等复杂脚本),同时保持复制粘贴功能的准确渲染和正确的 Unicode 映射。理想情况下,该解决方案不应需要大量后备字体配置或嵌入多个字体文件。我已附上参考图片以进一步说明该问题。
[![此处缺少不同语言的文本][1]][1]
这里缺少不同语言的文本
[![PDF 中的数字未正确呈现,当我尝试以另一种语言复制和粘贴内容时,粘贴的文本显示为乱码。][2]][2]
第二张图片
PDF 中的数字未正确呈现,当我尝试以另一种语言复制和粘贴内容时,粘贴的文本显示为乱码。
拥有最多语言的单一字体是Noto Fonts之一,如Noto Sans,因为它目前支持885种语言。但您也可以随时加载动态字体。
@react-pdf/renderer
支持自定义字体,您可以在此answer中找到如何使用它的方法。
一个例子:
import {
Font,
} from '@react-pdf/renderer';
import NotoSans from './pdfFonts/noto-sans.ttf';
Font.register({
family: 'Noto Sans',
fonts: [
{
src: NotoSans,
},
],
});