Как установить символ рубля с помощью iText 7? - PullRequest
0 голосов
/ 14 января 2019

Я использую 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));

Я не получил никакого результата ...

1 Ответ

0 голосов
/ 15 января 2019

Давайте следовать официальному примеру iText7 (он написан на Java, но поскольку iText автоматически переносится на C # из Java, различий не должно быть): 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

Теперь давайте используем шрифт Arial, представленный в windows. FontForge показывает, что символ обрабатывается внутри шрифта:

enter image description here

Теперь давайте изменим кодировку на IDENTITY_H:

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

и увидите, что все правильно обработано:

enter image description here

Поэтому я предлагаю вам проверить ваш шрифт. Похоже, внутри него нет символа рубля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...