You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDFKit插件生成PDF时阿拉伯语文本显示及词序异常问题求助

你遇到的阿拉伯语文本词序错误、显示异常是因为PDFKit原生不支持从右到左(RTL)语种的排版逻辑,也没有内置阿拉伯语字符的变形、连写处理能力,即便加载了支持阿拉伯语的字体,也只会按从左到右的顺序输出孤立字符,自然会出现显示错误。

以下是可直接落地的解决方法:

方案一:文本预处理 + 原生PDFKit(改动最小,适配现有代码)

  1. 安装专门处理阿拉伯语RTL和字符变形的依赖包
npm install rtl-arabic
  1. 调整你的代码,在传入文本给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分支,无需额外做文本预处理:

  1. 替换原生PDFKit
npm uninstall pdfkit
npm install pdfkit-rtl
  1. 代码逻辑和你原来的写法完全一致,无需额外调整,直接传入阿拉伯语文本即可正常输出。

注意事项

  • 你当前使用的Amiri字体本身已经支持阿拉伯语字符,无需更换
  • 如果存在阿拉伯语和其他语种混排的需求,可搭配bidi-js库做双向文本预处理,适配混排场景

内容的提问来源于stack exchange,提问作者Ronak Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 22:45:03