卢比符号在安卓系统中无法显示

3

我正在使用itextpdf-5.3.4.jar来创建PDF文件,为了显示卢比符号,我使用了自定义字体。我尝试了arial.ttfarialbd.ttf这两种字体,但是没有成功显示卢比符号。我参考了以下链接来显示卢比符号,但对我并不起作用: 如何在iText PDF中显示印度卢比符号(MVC3)。这是我使用的代码。

BaseFont rupee =BaseFont.createFont( "assets/arial .ttf", BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
createHeadings(cb,495,60,": " +edt_total.getText().toString(),12,rupee);

  private void createHeadings(PdfContentByte cb, float x, float y, String text, int   size,BaseFont fb){

        cb.beginText();
        cb.setFontAndSize(fb, size);
        cb.setTextMatrix(x,y);
        cb.showText(text.trim());
        cb.endText();
    } 

请帮我,各位大佬。

请删除这里的空格 "assets/arial .ttf"。它应该是 "assets/arial.ttf"。同时确保您已将字体 arial.ttf 复制到您的 assets 文件夹中。 - Phantômaxx
我已经删除了空格并尝试过,但仍然无法工作。arial.ttf文件在资产文件夹中。@Funkystein - Deepu T
我正在以这种格式传递文本 ₹ 108,2.00.@Funkystein。 - Deepu T
你会得到一个空的正方形作为卢比字符,对吧? - Phantômaxx
这是典型的情况,当你使用的字体没有该字形时,或者你没有使用正确的编码方式。 - Phantômaxx
显示剩余2条评论
1个回答

6
在评论区,Funkystein写道,你描述的问题通常发生在以下情况下:
  1. 你使用的字体没有该字形。或者
  2. 你没有使用正确的编码。
我已经写了一个示例来说明这一点:RupeeSymbol
public static final String DEST = "results/fonts/rupee.pdf";
public static final String FONT1 = "resources/fonts/PlayfairDisplay-Regular.ttf";
public static final String FONT2 = "resources/fonts/PT_Sans-Web-Regular.ttf";
public static final String FONT3 = "resources/fonts/FreeSans.ttf";
public static final String RUPEE = "The Rupee character \u20B9 and the Rupee symbol \u20A8";

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(DEST));
    document.open();
    Font f1 = FontFactory.getFont(FONT1, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);
    Font f2 = FontFactory.getFont(FONT2, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);
    Font f3 = FontFactory.getFont(FONT3, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);
    Font f4 = FontFactory.getFont(FONT3, BaseFont.WINANSI, BaseFont.EMBEDDED, 12);
    document.add(new Paragraph(RUPEE, f1));
    document.add(new Paragraph(RUPEE, f2));
    document.add(new Paragraph(RUPEE, f3));
    document.add(new Paragraph(RUPEE, f4));
    document.close();
}
RUPEE常量是一个String,其中包含卢比字符和卢比符号:"The Rupee character ₹ and the Rupee symbol ₨"。 这些字符以Unicode值的形式存储,因为如果我们以其他方式存储这些字符,则可能无法正确呈现。例如:如果您将值作为Winansi从数据库检索,则会得到不正确的字符。
我测试了三种不同的字体(PlayfairDisplay-Regular.ttf,PT_Sans-Web-Regular.ttf和FreeSans.ttf),并使用IDENTITY_H进行三次编码。我还第四次使用WINANSI来显示它错了。
结果是名为rupee.pdf的文件:
如您所见,前两种字体知道如何绘制卢比字符。第三个不知道。前两种字体不知道如何绘制卢比符号。第三个可以。但是,如果您使用错误的编码,则所有字体都不会绘制正确的字符或符号。
简而言之:您需要找到一个知道如何绘制所需字符或符号的字体,然后必须确保您正在使用正确的编码(对于StringFont)。
您可以在此处下载完整的示例代码。

1
漂亮的回答,+1。我不会使用卢比符号,但这个答案非常棒。我希望原帖作者能够接受它。 - Phantômaxx
提供的链接未找到。 - Shailendra Madda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接