4

我想在 iTextPDf 中显示特殊字符印度卢比符号,

我的代码:

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

2 回答 2

7

在源代码中存储 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 能够呈现这两个符号。检查您使用的字体是否知道如何绘制符号非常重要。如果没有,您的页面上将不会显示任何内容。

于 2013-07-04T12:26:55.710 回答
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 代表印度卢比一样。这取决于该字体。

于 2013-07-04T12:11:48.643 回答