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

时间:2012-05-08 13:04:38

标签: java api unicode pdf-generation jdk1.4

我试过iText,PDFBox& Oracle Forms。我还成功地在iText的情况下生成古吉拉特语PDF文档。但是,不幸的是,它没有在古吉拉特语(UTF-8)语言中生成适当的字体。

我的项目是jdk 1.4&这是必须使用的。所以,我需要支持Gujarati Font的旧版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();
    }
   } 

编辑1:

也许图像没有显示出来。它已上传here

编辑2:

image of font examples

步骤1)我输入一个gujarati String Google Transliterate。

步骤2)我使用BableMap软件将其转换为unicode,以使用Resourse Bundle来使用它。

问题:让我有一个字符串:બિલાડી(Biladi)

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

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

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

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

我尝试过使用“gu”& “gu.UTF-8”& “UTF-8”。但是,每当我得到相同的输出时。

1 个答案:

答案 0 :(得分:1)

更新了答案

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

因此,事实证明,iText不支持对印度语字符集进行此类渲染。粗略地说,iText使用awt的Graphics2D来逐个渲染非拉丁语unicode字符作为PDF中的图像。 (我想这是因为不一定在每个人的计算机上安装适当的字体)。此功能不会考虑此特殊顺序。

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

看起来这已经出现过了:

原始答案

Kem chho,

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

根本问题是'first'字符是'pre-base'字符,是Diacritic的一种类型。它有点像欧洲文本中的“重音”,因为它不能独立存在,其目的是为了修饰另一个角色。在这种情况下,它将'Ba'(બ)变成'Bi'。

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

因此,在Google Transliterate和您的代码点表示之间,这些字符被翻转了。因此,您需要查看您的翻译方式。

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

看起来,有些口译员将“前基地”置于主辅音之后,而不是之前:

  • 请注意,将这些字符粘贴到(Linux)终端时, 前2个字符是从前到后出现的。我相信一些事情 类似的事也发生在你身上。
  • 当你尝试时,你也会注意到 在Google Transliterate中编辑此单词,您无法将光标置于其间 前2个字符,当你点击退格时,左边 字符在右边删除。

所以,如果你能解决这个'翻转'发生的地方,那么希望你的解决方案能够出现。

希望这有帮助