我正在使用 Node js 应用程序的 pdfkit 包来生成 PDF,但是当我尝试生成阿拉伯文本时遇到了问题。它总是颠倒阿拉伯文本中的数字。
如果我想写: নে 1992 (The Year 1992),它总是会变成(সেস ٢٩٩١),即使我使用 Unicode 自定义字体,这个问题仍然存在。
这是图像中的示例:
这是我的代码:
function generatePDFForRuleAndRegulation(data) {
const fileNamePDF = `${data.name}.pdf`;
const doc = new PDFDocument();
// Pipe the PDF document to a writable stream (file in this case)
const stream = fs.createWriteStream(fileNamePDF);
doc.pipe(stream);
doc
.font(`${path.join(__dirname, "../../assets/fonts/NRT-Reg.ttf")}`)
.fontSize(12)
.text(`${data.name}`, {
align: "center",
});
doc.moveDown(); // Move cursor down
doc
.font(`${path.join(__dirname, "../../assets/fonts/Rabar_021.ttf")}`)
.fontSize(10)
.text(data.text, { align: "right", features: ["rtla"] });
// Finalize the PDF document
doc.end();
// Inform when the file has been created
stream.on("finish", () => {
console.log(`PDF created: ${fileNamePDF}`);
});
}
您可以建议任何解决方案或解决方法吗?或者,您知道另一个可以生成也支持阿拉伯字体的 PDF 的软件包吗?
最后,我使用自定义 RTL 而不是 pdfkit 插件。
const isHebrew = (text) => {
return text.search(/[\u0590-\u05FF]/) >= 0;
};
const isArabic = (text) => {
return text.search(/[\u0600-\u06FF]/) >= 0;
};
const rightToLeftText = (text) => {
if (isHebrew(text) || isArabic(text)) {
return text.split(" ").reverse().join(" ");
} else {
return text;
}
};
const text = rightToLeftText(data.text);
doc
.font(`${path.join(__dirname, "../../assets/fonts/Rabar_021.ttf")}`)
.fontSize(10)
.text(text, { align: "right" });