Во-первых, проблема не связана с компоновкой (обработка таблицы / ячейки / и т. Д.) - она касается только шрифтов и того, как iText обрабатывает их.
Во-вторых, проблема заключается в том, что стандартный шрифт PDF для символов Symbol, которыйиспользуется iText, отличается от используемого в браузерах.
В-третьих, iText неправильно обрабатывает "\F02D\9"
(и, в частности, "\ 9").
Что вы можете сделатьсделать, чтобы улучшить результирующий PDF?Не используйте стандартный шрифт Symbol для PDF - используйте вместо него собственный шрифт Symbol.
Как это сделать?
Позвольте мне представить вам класс FontProvider
.
FontProvider
отвечает за обработку шрифтов, которые могут использоваться при обработке html-файла.Его экземпляр может быть передан как параметр ConverterProperties
, в противном случае он будет создан iText.По умолчанию iText добавляет к FontProvider
все стандартные шрифты pdf (FontProvider#addStandardPdfFonts
) и некоторые бесплатные шрифты sans (DefaultFontProvider#SHIPPED_FONT_NAMES
).
Вы хотите использовать свой собственный шрифт Symbol: это означает, что выдолжно препятствовать тому, чтобы iText рассматривал стандартный шрифт Символа во время преобразованияДля этого создайте DefaultFontProvider
экземпляр с первым аргументом конструктора, переданным как false
.(!) В 99% случаев вы хотите, чтобы некоторые другие стандартные шрифты учитывались при конвертации.Поэтому, пожалуйста, добавьте их вручную следующим образом:
provider.addFont(StandardFonts.TIMES_ROMAN);
// some other fonts to be added
Теперь добавьте свой собственный Symbol
шрифт к этому FontProvider
экземпляру так же, как я делал это для вышеприведенного Times:
provider.addFont("C:\\Windows\\Fonts\\symbol.ttf", PdfEncodings.IDENTITY_H);
Важно использовать IDENTITY_H
там, потому что в шрифте Symbol "-" в качестве значения Unicode указано "F02D".
После всех этих изменений мне удалось получить следующий файл:
Теперь возникает вторая проблема: iText по умолчанию неправильно обрабатывает «\ 9».Что касается этого, я не знаю ни одного прямого решения.Возможно, лучше удалить его из html.