android - Android 中不显示卢比符号

标签 android itext

friend 们正在使用itextpdf-5.3.4.jar来创建pdf。为了显示卢比符号,我使用自定义字体。我尝试了 arial.ttf、arialbd.ttf 这两种字体,但运气不佳,卢比符号没有显示。为了显示卢比符号,我已点击这些链接,但它对我不起作用。 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();
    } 

请大家帮帮我。

最佳答案

在评论部分,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,其中包含卢比字符以及卢比符号:“卢比字符 £ 和卢比符号 ₨”。 字符存储为 Unicode 值,因为如果我们以其他方式存储字符,它们可能无法正确呈现。例如:如果您以 Winansi 身份从数据库中检索值,最终会得到不正确的字符。

我测试了三种不同的字体(PlayfairDisplay-Regular.ttf、PT_Sans-Web-Regular.ttf 和 FreeSans.ttf) 我使用 IDENTITY_H 作为编码三次。我还第四次使用 WINANSI 来表明如果这样做就会出错。

结果是一个名为 rupee.pdf 的文件:

Rupee character vs Rupee Symbol

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

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

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

关于android - Android 中不显示卢比符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44845701/

相关文章:

java - 自动打印 iText 生成的 PDF

java - 文本对象内不允许使用路径构造或绘图运算符

c# - ITextSharp HTML 到 PDF 转换 CSS 图像在转换后不显示

c# - 使用 ITextsharp 将 Html 导出为 PDF

java - 无法使用java将内容保存在文本文件中

android - 在某些手机中拍摄时照片会旋转 90 度

android - 是否可以在 android 中访问运行时解密的文件?

android - RecyclerView NotifyItemInserted

Android - 径向图实现

Android让对话框全屏显示