如何使用iText 7设置卢布符号?

时间:2019-01-14 15:42:45

标签: c# .net pdf itext itext7

我使用iText 7.1.4,并且经常在其中使用俄语字体。我想在PDF文件中设置卢布符号,但不能。

这是代码段:

tableVariations.AddCell(priceSettings.HasLines ?
  new TextCell(
    $"{variation.Price}₽",
    PdfFontFactory.CreateFont(priceSettings.ContentFont, "Cp1251", true),
    priceSettings.ContentFontSize,
    priceSettings.ContentForegroundColor.ToDeviceRgb(),
    priceSettings.LinesColor.ToDeviceRgb(),
    priceSettings.LinesThickness,
    TextAlignment.RIGHT) :
  new TextCell(
    $"{variation.Price}₽",
    PdfFontFactory.CreateFont(priceSettings.ContentFont, "Cp1251", true),
    priceSettings.ContentFontSize,
    priceSettings.ContentForegroundColor.ToDeviceRgb(),
    TextAlignment.RIGHT));

其中tableVariationsTablepriceSettings.ContentFont是俄语字体。

我只能在结果PDF文件中看到价格,但是符号没有出现。

我尝试过这样:

new TextCell(
    $"{variation.Price}₽",
    PdfFontFactory.CreateFont(priceSettings.ContentFont, PdfEncodings.UNICODE_BIG, true));

new TextCell(
    $"{variation.Price}\u20BD",
    PdfFontFactory.CreateFont(priceSettings.ContentFont, PdfEncodings.UNICODE_BIG, true));

new TextCell(
    $"{variation.Price}\u20BD",
    PdfFontFactory.CreateFont(priceSettings.ContentFont, PdfEncodings.UTF8, true));

new TextCell(
    $"{variation.Price}₽",
    PdfFontFactory.CreateFont(priceSettings.ContentFont, PdfEncodings.UTF8, true));

我没有得到任何结果...

1 个答案:

答案 0 :(得分:2)

让我们遵循官方的iText7示例(它是用Java编写的,但是由于iText是从Java自动移植到C#的,因此应该没有区别): https://github.com/itext/i7js-examples/blob/develop/src/test/java/com/itextpdf/samples/sandbox/fonts/tutorial/F05_Russian_correct_encoding.java

让我们在文本上添加卢布符号,然后看看FreeSans不能很好地呈现它。原因是字体内没有卢布符号,FontForge证明了这一假设:

enter image description here

现在,让我们使用Windows中提供的Arial字体。 FontForge显示符号是在该字体内处理的:

enter image description here

现在让我们将编码更改为IDENTITY_H:

PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H);

看到一切都已正确处理:

enter image description here

所以我建议您检查字体。看起来里面没有卢布符号。