卢比符号未显示在android中

时间:2014-10-14 12:28:17

标签: android itextpdf

嗨朋友们正在使用itextpdf-5.3.4.jar来创建pdf。为了显示卢比符号使用自定义字体。我试过arial.ttf,arialbd.ttf这两种字体但没有运气卢比sybol没有显示。为了显示卢比符号我已经按照这些链接,但它不适合我。 How to display indian rupee symbol in iText PDF in 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();
} 

请帮帮我们。

1 个答案:

答案 0 :(得分:4)

在评论部分,Funkystein写道,你描述的问题是典型的

  1. 您使用的字体没有该字形。或
  2. 您没有使用正确的编码。
  3. 我写了一个例子来说明这一点: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的文件:

    Rupee character vs Rupee Symbol

    如您所见,前两种字体知道如何绘制卢比字符。第三个没有。前两种字体不知道如何绘制卢比符号。第三个是。但是,如果使用错误的编码,则所有字体都不会绘制正确的字符或符号。

    简而言之:您需要找到一种知道如何绘制所需字符或符号的字体,然后您必须确保使用正确的编码(对于String以及{ {1}})。

    您可以下载完整的示例代码here