我已经尝试过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();
    }
   }

编辑1:

图像可能没有显示。它已上传here

编辑2:

步骤1)我输入古吉拉特语字符串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”。但是,每次我得到相同的输出时。

最佳答案

更新了答案

在您发表评论后,我意识到我是错的,即,变音符号应在字节序列中显示第二个位置,即使它应显示在主字符的左侧。

因此,事实证明,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之前。

    潜在的问题是,“第一个”字符是“pre-base”字符,它是o​​jit_a的一种类型。它有点像欧洲文字中的“口音”,因为它不能独立存在,其目的是修饰另一个字符。在这种情况下,它将“Ba”(બ)变成“Bi”。

    您会在Unicode Codepage中看到,第一个字符(િ)确实是代码点\u0ABF,第二个字符(બ)是\u0AAC:Diacritic

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

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

    看起来,有些解释器将“前置词”放在主辅音之后,而不是在主辅音之前:
  • 请注意,当您将这些字符粘贴到(Linux)终端中时,
    前2个字符排在后面。我相信
    您也发生了类似的情况。
  • 您还会注意到,当您尝试
    在Google Transliterate中编辑此单词,您不能将光标放在
    前两个字符,当您按下退格键时,左侧
    右边的字符被删除。

  • 因此,如果您可以算出发生这种“翻转”的位置,那么希望您的解决方案能够自我展示。

    希望这可以帮助

    关于java - 哪个PDF生成API(Java)支持古吉拉特语字体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10499183/

    10-12 22:17