Java 如何使Itext接受具有如下序列的unicode

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

如何使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.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

如果您希望看到屏幕截图的第一行,我的答案有两个:

  • 使用知道如何呈现印地语的字体(例如fresans.ttf、arialuni.ttf等)
  • 使用正确的编码(Identity-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);