哪个PDF生成API(Java)支持古吉拉特语字体?
我试过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:
也许图像没有显示出来。 它在这里上传。
编辑2:
步骤1)我键入古吉拉特语字符串谷歌音译。
步骤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”。 但是,每次我得到相同的输出。
更新的答案
在你的评论之后,我意识到我错了,即变音字符应该出现在字节序列的第二位,即使它应该在主字符的左边呈现 。
因此,事实certificate,iText不支持在印度字符集上进行此类渲染。 粗略地说,iText使用awt的Graphics2D
逐个渲染非拉丁语unicode字符作为PDF中的图像。 (我想这是因为不一定要在每个人的计算机上安装适当的字体)。 此function不考虑此特殊顺序。
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
原始答案
Kem chho,
我相信iText正在显示正确的字符,但在将字符串转换为unicode点之前,输入的前2个字符已被“翻转”。 因此,问题发生在数据甚至到达iText之前。
根本问题是’第一’字符是’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个字符之间,当您点击退格键时,左侧字符会在右侧之前删除。
所以,如果你能解决这个“翻转”发生的地方,那么希望你的解决方案能够呈现出来。
希望这可以帮助