#java #unicode #internationalization #itext
#java #Юникод #интернационализация #itext
Вопрос:
Мне нужно добавить японский / китайский текст из веб-ответа xml в pdf с использованием iText на java. Я попробовал следующий код после копирования KozMinPro-Regular.ttf на мой c:WINDOWSFonts папка, но сбой.
Font font = new Font(BaseFont.createFont("KozMinPro-Regular", "UniJIS-UCS2-H", BaseFont.EMBEDDED), 10);
Кто-нибудь может мне помочь?
Комментарии:
1. вы получаете исключение, null, неправильный шрифт?
2. Вам нужен полный путь. В случае файлов шрифтов, содержащих более одного шрифта (.ttc), вам также необходимо добавить «, 1» или «, 2», чтобы определить, какой шрифт вы хотите. PS: Я всегда предпочитаю «Identity-H».
Ответ №1:
Вам следует использовать iTextAsian (дополнительный JAR-файл).
Некоторое описание cmap_info.txt внутри iTextAsian.jar .
Обратите внимание, что какое бы значение вы ни передали для параметра ’embedded’ с помощью метода BaseFont.CreateFont, шрифт НЕ БУДЕТ встроен. Чтобы понять, почему, пожалуйста, прочитайте следующую информацию.
Шрифты, которые используются в Acrobat Reader при просмотре PDF-файла, использующего шрифты CJK, будут загружены в одном или нескольких наборах шрифтов. Вы можете загрузить эти пакеты шрифтов самостоятельно по этому URL:http://www.adobe.com/products/acrobat/acrrasianfontpack.html
На этой странице вы можете найти следующую информацию: «Если автор файла Adobe (R) Portable Document Format (PDF) вставляет шрифты CJK и Central European (CE) в документ PDF, то любая языковая версия программного обеспечения Adobe Reader (R) сможет отображать текст CJK и CE в любой системе без дополнительного программного обеспечения.
Если автор PDF-документа использует шрифты CJK или CE, но не внедряет их в документ, то для просмотра файла Adobe PDF на неродных системах потребуется установить правильные шрифты.»
Если необходимые шрифты не встроены в файл PDF, вам не следует использовать абсолютный путь для файлов шрифтов.
Создайте jar-файл с файлами шрифтов и включите его в запись classpath.
Ответ №2:
Я не тестировал это, но согласно этой странице
Использование установленных шрифтов примерно такое.
Font font = new Font(BaseFont.createFont("C:\Windows\Fonts\KozMinPro-Regular.ttf,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 10);