Java 如何使Itext接受具有如下序列的unicode
如何使Itext库接受unicode,如下所示。实际上,它使用java控制台打印一个印地语字符串,但我试图通过itext接受它以生成报告Java 如何使Itext接受具有如下序列的unicode,java,swing,javafx,itext,Java,Swing,Javafx,Itext,如何使Itext库接受unicode,如下所示。实际上,它使用java控制台打印一个印地语字符串,但我试图通过itext接受它以生成报告 u0915\u093e\u0930 \u092a\u093e\u0930\u094d\u0915\u093f\u0902\u0917 下面是我正在使用的代码snipet BaseFont unicode = BaseFont.createFont("/home/mani/Downloads/arialuni.ttf", BaseFont.IDENT
u0915\u093e\u0930 \u092a\u093e\u0930\u094d\u0915\u093f\u0902\u0917
下面是我正在使用的代码snipet
BaseFont unicode = BaseFont.createFont("/home/mani/Downloads/arialuni.ttf",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font=new Font(unicode,12,Font.NORMAL,new BaseColor(50,205,50));
table = new PdfPTable(new float[] { 10, 60, 30 });
table.setWidthPercentage(100);
PdfPCell customerLblCell = new PdfPCell(new Phrase("CUSTOMERS",
this.headerFont));
PdfPCell balanceLblCell = new PdfPCell(new Phrase(
"\u0915\u093e\u0930\u092a\u093e\u0930\u094d\u0915\u093f\u0902\u0917", font));
但它又一次无法识别文本。
预期:-कारपार्किंग 我假设您希望输出看起来像此屏幕截图中的第一行: 此屏幕截图取自使用以下示例创建的文件: 您的问题并不完整,因为您没有向我们显示您使用的字体(在我的例子中,
font
是freans.ttf
),也没有显示您使用的编码(应该是IDENTITY\u H
)
如果您希望看到屏幕截图的第一行,我的答案有两个:
u
之前的\
字符
如果您希望看到其他内容,那么请查看第二行和第三行,我在其中插入了Unicode值,并在每个Unicode字符前面插入了空格。您会注意到,每个字符都正确渲染,但没有制作连字。如果您需要连字,您需要等待下一个主要版本的iText,该版本将支持印地语,但该支持将无法作为开源软件提供。(我们注意到有太多的开发者在没有商业许可证的情况下使用iText,所以我们只提供一些封闭源代码的组件。)
更新:
您已经更新了您的问题,但您又一次没有提供允许人们重现该问题的答案。当我完成您的代码时,我得到以下结果:
这是我的代码:
BaseFont unicode = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font=new Font(unicode,12,Font.NORMAL,new BaseColor(50,205,50));
PdfPTable table = new PdfPTable(new float[] { 10, 60, 30 });
table.setWidthPercentage(100);
PdfPCell customerLblCell = new PdfPCell(new Phrase("CUSTOMERS"));
PdfPCell balanceLblCell = new PdfPCell(new Phrase("\u0915\u093e\u0930\u092a\u093e\u0930\u094d\u0915\u093f\u0902\u0917", font));
table.addCell(customerLblCell);
table.addCell(balanceLblCell);
table.completeRow();
table.setSpacingBefore(10);
document.add(table);
我还在线更新了示例:
您的代码中缺少什么?创建一个包含3列的表,然后创建2个单元格。我没有看到您将单元格添加到表的任何位置,也没有看到单元格3的任何位置。因此,即使将这两个单元格添加到表中,也不会呈现它们,因为iText会丢弃不完整的行(除非使用completeRow()
方法)
我用这种字体:(你可以下载)。我也尝试过使用MS Arial Unicode(arialunicode.ttf),这给了我以下结果:
简而言之:你声称iText不承认Unicode是错误的。有大量示例证明Unicode正确呈现(使用FreeSans和MS Arial Unicode)。Itext无法识别此Unicode字符串。thanx sir可快速获得帮助。正如我所提到的,我会选择一个最新版本的itext,它将尽快推出。同时,我正在尝试完全一样,你显示。但就我而言कारपार्किंग 未在pdfcell中显示。请帮助我,上面我也提到了我的代码。我创建的字体是BaseFont unicode=BaseFont.createFont(“/home/mani/Downloads/arialuni.ttf”,BaseFont.IDENTITY_H,true);Font Font=新字体(unicode,12,Font.NORMAL,新基色(50205,50));如果字体是一个问题,那么请提供我下载链接也。我已经试过了两种字体,这两种字体在你的例子中都提到过!您现在的问题是没有显示文本,还是文本不正确(र 作为完整字符而不是变音符号,ि 之后क 而不是以前?如果是前者,您应该重新查看代码,因为@BrunoLowagie已经向您展示了您应该做什么。如果是后者,iText目前无法帮助您。
BaseFont unicode = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font=new Font(unicode,12,Font.NORMAL,new BaseColor(50,205,50));
PdfPTable table = new PdfPTable(new float[] { 10, 60, 30 });
table.setWidthPercentage(100);
PdfPCell customerLblCell = new PdfPCell(new Phrase("CUSTOMERS"));
PdfPCell balanceLblCell = new PdfPCell(new Phrase("\u0915\u093e\u0930\u092a\u093e\u0930\u094d\u0915\u093f\u0902\u0917", font));
table.addCell(customerLblCell);
table.addCell(balanceLblCell);
table.completeRow();
table.setSpacingBefore(10);
document.add(table);