如何在MVC3中的iText PDF中显示印度卢比符号

时间:2013-07-04 08:15:55

标签: asp.net-mvc-3 itextsharp nopcommerce itextpdf

我想在iTextPDf中显示Special Character India Rupee Symbol,

我的代码:

 Font fontRupee = FontFactory.GetFont("Arial", "₹", true, 12);
 Chunk chunkRupee = new Chunk(" ₹ 5410", font3);

2 个答案:

答案 0 :(得分:5)

在源代码中存储Unicode字符(例如₹)绝不是一个好主意。如果你这样做会有很多事情出错:

  • 有人可以使用与Unicode不同的编码保存文件,例如,双字节卢比字符可以解释为两个独立的字节,代表两个不同的字符。
  • 即使您的文件存储正确,也许您的编译器会使用错误的编码读取它,将双字节字符解释为两个单独的字符。

从您的代码示例中,您显然不熟悉称为 encoding 的概念。创建Font对象时,将卢比符号作为编码传递。

实现目标的正确方法如下:

BaseFont bf =
    BaseFont.CreateFont("c:/windows/fonts/arial.ttf",
                        BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bf, 12);
Chunk chunkRupee = new Chunk(" \u20B9 5410", font3);

请注意,卢比符号有两个可能的Unicode值(来源Wikipedia):\ u20B9是您要查找的值;替代值是\ u20A8(看起来像这样:₨)。

我用arialuni.ttf和arial.ttf对此进行了测试。令人惊讶的是MS Arial Unicode只能渲染₨;它无法渲染₹。普通arial能够渲染两个符号。检查您使用的字体是否知道如何绘制符号非常重要。如果没有,则页面上不会显示任何内容。

答案 1 :(得分:1)

找出哪个字体有印度卢比符号并通过

将其导入iTexy
BaseFont customfont = BaseFont.createFont(rootpath + "fonts/customfont.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED);

Font rupeeFont= new Font(customfont, 9,
                Font.NORMAL, new Color(55, 55, 55));

Chunk chunkRupee = new Chunk("\u20B9", rupeeFont);

注意:使用自定义字体时,您可能需要使用其他一些字符或unicode(U + 20B9)作为印度卢比

Chunk chunkRupee = new Chunk("W", rupeeFont);这样的特定自定义字体W代表印度卢比。这取决于那种字体。