哪个 PDF 生成 API (Java) 支持古吉拉特语字体?

2023-11-21

我尝试过 iText、PDFBox 和 Oracle Forms。我还成功地使用 iText 生成了古吉拉特语 PDF 文档。但是,不幸的是它没有生成古吉拉特语 (UTF-8) 语言的正确字体。

我的项目是 jdk 1.4 & 这是强制使用的。所以,我需要支持古吉拉特语字体的旧版本 API。

请建议是否有可用的选项。

示例代码:

public void GeneratePDFusingiText(String lStrGujaratidata)
  {
    try
    {

      BaseFont bf = BaseFont.createFont("C:\\Windows\\Fonts\\Shruti.ttf",  BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
      Font font = new Font(bf, 12);
      Document document = new Document();
      PdfWriter.getInstance(document, new FileOutputStream("D:/GeneratePDFusingiText.pdf"));
      document.open();
      document.add(new Paragraph(lStrGujaratidata, font));
      document.close();
    }
    catch(Exception e)
    {
      System.out.println("Exception while generating PDF");
      e.printStackTrace();
    }
   } 

EDIT 1:

也许图像没有被显示。已上传here.

EDIT 2:

image of font examples

Step-1)我输入古吉拉特语字符串谷歌音译。

Step-2)我使用 BableMap Software 将其转换为 unicode,以便使用 Resource Bundle 来使用它。

Issue:让我有一个字符串:બિલાડી(比拉迪)

它的 unicode 将是:\u0AAC\u0ABF\u0AB2\u0ABE\u0AA1\u0AC0

检查上面的粗体 Unicode 字符。这就是我遇到问题的地方。现在如果我将这个 unicode 更改为\u0ABF\u0AAC\u0AB2\u0ABE\u0AA1\u0AC0 ,它以 PDF 格式打印正确的输出。

同时它在 HTML 中打印错误的输出,即:િબલાડી

我必须在他们之间进行管理。

我尝试过使用“gu”和“gu.UTF-8”和“UTF-8”。但是,每次我都会得到相同的输出。


更新答案

在您发表评论后,我意识到我错了,即变音符号should在字节序列中出现第二个,即使它应该是rendered主角的左边。

因此,事实证明,iText 不支持印度语字符集上的这种类型的渲染。粗略地说,iText 使用 awt 的Graphics2D将非拉丁 unicode 字符一一呈现为 PDF 中的图像。 (我想这是因为不一定每个人的计算机上都安装了合适的字体)。此功能不考虑这种特殊顺序。

iText 使用另一位开发人员提供的类,确实支持阿拉伯语的类似行为。看com.itextpdf.text.pdf.ArabicLigaturizer。也许您可以自己创建一个类似的? (!)

貌似以前也出现过这样的情况:

  • http://thread.gmane.org/gmane.comp.java.lib.itext.general/56702/focus=59552
  • http://itext-general.2136553.n4.nabble.com/patch-for-complex-scripts-indic-rendering-td2167588.html

原答案

肯乔,

我相信 iText 显示了正确的字符,但在将字符串转换为 unicode 点之前,输入的前 2 个字符已被“翻转”。因此,问题发生在数据到达 iText 之前。

根本问题是“第一个”字符是“前基”字符,它是一种变音符号。它有点像欧洲文本中的“口音”,它不能单独存在,其目的是修饰另一个字符。在本例中,它将“Ba”(બ) 转换为“Bi”。

您将在 Unicode 代码页中看到,第一个字符 (િ) 确实是代码点 \u0ABF,第二个字符 (બ) 是 \u0AAC :http://en.wikipedia.org/wiki/Gujar%C4%81ti_script#Unicode

因此,在谷歌音译和代码点表示之间的某个地方,这些字符被翻转了。因此,您需要回顾一下您是如何进行翻译的。

您是如何将这些字符转换为代码点的?

看起来,一些解释者将“前基”放在主辅音之后,而不是之前:

  • 请注意,当您将这些字符粘贴到 (Linux) 终端时, 前 2 个字符从后到前出现。我相信某事 你也发生过类似的事情。
  • 您还会注意到,当您尝试时 在 Google Transliterate 中编辑该单词时,您无法将光标放在 前 2 个字符,当您按退格键时,左侧 右边的字符被删除。

因此,如果您能找出这种“翻转”发生的位置,那么希望您的解决方案能够出现。

希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪个 PDF 生成 API (Java) 支持古吉拉特语字体? 的相关文章

随机推荐