使用正确的格式处理 pdfmake 中的 RTL(阿拉伯语)文本

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

我目前正在使用 pdfmake 生成 PDF,需要包含阿拉伯文本,这需要正确处理 RTL(从右到左)格式。但是,我遇到了文本显示的问题。
enter image description here
当我使用 pdfmake 生成 PDF 时,文本显示为:
enter image description here

通过我的研究,我发现了一个代码片段,通过颠倒词序部分解决了这个问题:

.split(' ').reverse().join(' ')

这在某种程度上有效,但在文本包含数字、括号或文本很长且跨多行的情况下会失败。在这种情况下,文本会变得混乱,从最后一行到第一行。

enter image description here
任何正确处理此问题的建议或解决方案将不胜感激。谢谢!

使用 .split(' ').reverse().join(' ') 反转单词,这部分有效,但引入了数字和多行文本的新问题。

我希望在 PDF 中正确显示阿拉伯文本,保留正确的 RTL 格式,包括正确处理数字、标点符号和多行文本。

right-to-left pdfmake arabic-support
1个回答
0
投票

我有同样的问题,尝试用这些自定义构建的函数来解决它,部分解决了小文本的问题,但当我在阿拉伯文本中包含括号、数字、英文字母时,它仍然存在相同的问题

function replacePositionForTableViewArabicWords(text, n) {
    if (!text) return '';

    // Split text into words while preserving punctuation
    const words = text.match(/\S+/g) || [];

    // Handle special characters
    const specialChars = {
      '(': ')',
      ')': '(',
      '/': '/',
      ':': ':'
    };

    let output = '';
    let line = '';
    for (let i = words.length - 1; i >= 0; i--) {
      const word = words[i];
      const withSpecialChars = specialChars[word] ? specialChars[word] : word;

      const isArabic = isArabicText(word);

      if (isArabic) {
        line = withSpecialChars + ' ' + line;
      } else {
        line = line + ' ' + withSpecialChars;
      }

      if (line.trim().split(' ').length >= n) {
        output = line.trim() + '\n' + output;
        line = '';
      }
    }
    output = line.trim() + ' ' + output;

    return output.trim();
  }

  function isArabicText(text) {
    var arabic = /[\u0600-\u06FF]/;
    return arabic.test(text);
}
  export function replacePositionForTableViewArabicWordsWithParams(text, n, style) {
    let reversedText = replacePositionForTableViewArabicWords(reverseString(text), n);
    return {
      text: reversedText,
      style: style,
      alignment: 'right',
      direction: "rtl",
      rtl: true
    };
  }

如果有人有答案请提供给我们

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.