PDF 套件反转阿拉伯字体中的数字

问题描述 投票:0回答:1

我正在使用 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 的软件包吗?

javascript node.js pdfkit
1个回答
0
投票

最后,我使用自定义 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" });

© www.soinside.com 2019 - 2024. All rights reserved.