PDFKit插件生成PDF时阿拉伯语文本显示及词序异常问题求助
你遇到的阿拉伯语文本词序错误、显示异常是因为PDFKit原生不支持从右到左(RTL)语种的排版逻辑,也没有内置阿拉伯语字符的变形、连写处理能力,即便加载了支持阿拉伯语的字体,也只会按从左到右的顺序输出孤立字符,自然会出现显示错误。
以下是可直接落地的解决方法:
方案一:文本预处理 + 原生PDFKit(改动最小,适配现有代码)
- 安装专门处理阿拉伯语RTL和字符变形的依赖包
npm install rtl-arabic
- 调整你的代码,在传入文本给PDFKit前先做预处理,同时设置右对齐参数:
const PDFDocument = require("pdfkit"); const fs = require('fs'); // 引入预处理库 const rtlArabic = require('rtl-arabic'); var doc = new PDFDocument({ size: [595.28, 841.89], margins: { top: 0, bottom: 0, left: 0, right: 0, }, }); const customFont = fs.readFileSync(`${_tmp}/pdf/Amiri-Regular.ttf`); doc.registerFont(`Amiri-Regular`, customFont); doc.fontSize(15); // 预处理阿拉伯语文本 const processedText = rtlArabic("مرحبا كيف حالك"); // 输出时设置右对齐 doc.font(`Amiri-Regular`).fillColor("black").text(processedText, { align: 'right' }); doc.pipe(fs.createWriteStream(`${_tmp}/pdf/arabic.pdf`)); doc.end();
方案二:使用支持RTL的PDFKit衍生版本
如果需要同时支持波斯语、乌尔都语等多种RTL语种,可以直接使用社区维护的支持RTL的PDFKit分支,无需额外做文本预处理:
- 替换原生PDFKit
npm uninstall pdfkit npm install pdfkit-rtl
- 代码逻辑和你原来的写法完全一致,无需额外调整,直接传入阿拉伯语文本即可正常输出。
注意事项
- 你当前使用的Amiri字体本身已经支持阿拉伯语字符,无需更换
- 如果存在阿拉伯语和其他语种混排的需求,可搭配
bidi-js库做双向文本预处理,适配混排场景
内容的提问来源于stack exchange,提问作者Ronak Patel
相关产品推荐
相关产品推荐

