我使用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));
其中tableVariations
是Table
。 priceSettings.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));
我没有得到任何结果...
答案 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证明了这一假设:
现在,让我们使用Windows中提供的Arial字体。 FontForge显示符号是在该字体内处理的:
现在让我们将编码更改为IDENTITY_H:
PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H);
看到一切都已正确处理:
所以我建议您检查字体。看起来里面没有卢布符号。