Я пытаюсь создать арабские pdf-документы с помощью iText 4.2.1. Документы основаны на шаблонах, представленных в формате Word xml. Я просто там, но попал в ловушку.iText & Arabic pdfs часто отсутствующие символы
В исходных документах используется шрифт Упрощенный арабский и отображается в порядке, поэтому я использовал то же самое в PDF. По большей части все прекрасно, но иногда оно «капли» персонажа.
Я прорисовал источник iText и вижу, где он преобразуется из базового кода 0x06xx в код представления 0xFExx в зависимости от правил формирования. После того, как он перевел код презентации, он затем ищет метрики каждого символа, в свою очередь, из файла шрифта, перед записью в поток вывода документа. Именно здесь иногда не удается найти нужный код в шрифте, поэтому просто опускает символ вместе.
В качестве примера, символ 0x0645 переводится 0xFEE2 используя эту строку из таблицы CharMap
{0x0645, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4}, /* MEEM */
... и 0xFEE2 не в Упрощенном арабском шрифте.
Учитывая, что документы хорошо отображаются в Word с использованием того же шрифта, должен ли iText вернуться к использованию базового кода 0x6xx для презентации? Если это так, то это разрешено в коммерческой версии библиотек (для чего я рад, если нужно, платить).
С другой стороны, это проблема с шрифтом, который другие библиотеки должны работать вокруг
Кто-нибудь еще ударил эту корягу или подобное, и если да, то что вы сделали, чтобы решить ее?
У меня была аналогичная проблема с лакокрасочными буквами - есть статья, которая мне помогла. Я боюсь, что это на польском языке, но google.translate должно быть достаточно, чтобы понять суть этого;) http://soft-java.net/solutions/iText-poskie-znaki-tworzenie-PDF#pr1 Главная дело в том, чтобы изменить кодировку в классе iText 'com.lowagie.text.pdf.BaseFont' в методе' createFont'. – rzysia
Спасибо rzysia. Использование Arial вместо упрощенного арабского языка и установка правильной кодировки работали для меня. – Vicki
Не только '4.2.1 - очень старая версия, как пишет Пауло, это даже версия, которая не была выпущена iText Software, а кем-то другим. iText перешел от «2.1.7» к «5.0.0». В старом репозитории SVN был тег '4.2.0', но он никогда не использовался для создания сборки релиза. Он использовался только для синхронизации с портом .NET. Кто-то другой взял этот тег, внес некоторые изменения и выпустил его как «4.2.1», но не под своим именем, как и следовало бы сделать. –