Как я могу правильно отображать хинди при экспорте в pdf?

Я использую i-report 5.5.0 для отчетов jasper. Мне нужно экспортировать текст на хинди в формат PDF, но часть на хинди преобразуется в ???????.

Я уже использовал расширение шрифта, но это не помогло:

название шрифта: "lohit Devanagari"
встроенный PDF: отмечен
кодировка PDF: Identity-H

Я также пробовал другие шрифты хинди, но пока ничего не получилось.

<textField>
    <reportElement x="111" y="26" width="100" height="20" uuid="5a471a16-de7b-4f55-9c9f-b01d37938b9f"/>
     <textElement>
        <font fontName="Lohit Devanagari" pdfEncoding="Identity-H" isPdfEmbedded="false"/>
    </textElement>
    <textFieldExpression><![CDATA[$F{DISTRICT_NAME}]]></textFieldExpression>
</textField>

person Priyesh Mishra    schedule 15.12.2015    source источник
comment
Использовали ли вы расширения шрифтов?   -  person Alex K    schedule 15.12.2015
comment
@AlexK, у возможных дубликатов нет ответов или принятого ответа, пользователь попробовал расширение шрифта, см. вопрос (вероятно, неправильно или шрифт ttf не может отображать uni-код), поэтому я опубликовал ответ.   -  person Petter Friberg    schedule 15.12.2015
comment
Этот пост содержит полезные комментарии и ответы   -  person Alex K    schedule 15.12.2015
comment
Кто-нибудь нашел способ решить это?   -  person S_S    schedule 08.06.2017
comment
@PriyeshMishra Я пробовал большую часть того, что вы упомянули, за исключением того, что мой проект не является Maven, поэтому я добавил .jar в качестве библиотек и внешнего JAR, но ни один из них не помог решить проблему.   -  person S_S    schedule 09.06.2017


Ответы (3)


Правильный способ — использовать font-extensions. pdfEncoding="Identity-H" устарело.

Сначала очистите этот контрольный список для отображения шрифта в формате pdf:

  1. Мой фактический .tff поддерживается (OpenType) и может ли шрифт на самом деле рендеринг персонажа. Не все шрифты отображают все символы в UTF-8

Если вы правильно создали расширение шрифта и оно не работает, вероятно, это ваша проблема.

  1. Передаю ли я правильную кодировку в iText. В случае сомнений (или вообще) используйте кодировку Identity-H, это рекомендуется для более новых стандартов PDF и дает вам возможность смешивать разные кодировки.

Identity-H кажется в порядке

  1. Является ли мой шрифт встроенным, чтобы, если я поделюсь файлом PDF, компьютеры, на которых нет этого шрифта, могли отображать содержимое.

Вставьте свой шрифт (в противном случае, если вы заставите его работать на своем компьютере, он может не работать на других), обратите внимание, что в вашем jrxml есть isPdfEmbedded=false, удалите тег и в расширении шрифта выберите true или установите тег на true.

Теперь просто сгенерируйте правильно font-extension и добавьте его в свой classpath,

Как добавить расширения шрифтов

EDIT: после того, как пользователь передал шрифт

Шрифт Krutidev_011.TTF не является допустимым шрифтом ttf, возможно, потому, что, к сожалению, стандарт Apple и стандарт Microsoft расходятся (я предполагаю, что ваш шрифт Apple ttf, а не ttf открытого типа).

Caused by: net.sf.jasperreports.engine.JRRuntimeException: java.awt.FontFormatException: java.nio.BufferUnderflowException
at net.sf.jasperreports.engine.fonts.SimpleFontFace.setTtf(SimpleFontFace.java:178)

Я попытался загрузить действительный шрифт ttf Lohit Devanagari из Интернета и добавить его как расширение шрифта, fontName="Lohit Devanagari" вот мой результат:

тест шрифта

Он отображает шрифты, но в результате может возникнуть проблема с лигатуризатором, о том, как решить эту проблему, см., Например, Почему гуджаратско-индийский текст неправильно отображается при использовании Arial Unicode MS?

Если вы хотите попробовать это расширение шрифта, я использовал банку расширения шрифта для Lohit Devanagari, не забудьте установить fontName="Lohit Devanagari"

person Petter Friberg    schedule 15.12.2015
comment
мой фактический .tff правильно отображает слово, и когда я экспортирую в другой формат, он работает хорошо (например, в HTML, ODT, EXCEL), только экспорт PDF создает проблему - person Priyesh Mishra; 15.12.2015
comment
Можете ли вы поделиться банкой расширения вашего шрифта? и ваш jrxml (или небольшой jrxml с текстом, который не отображается, чтобы проверить расширение вашего шрифта)? - person Petter Friberg; 15.12.2015
comment
Файл JAR: - s000.tinyupload.com/index.php?file_id=03986171897156283365 Jrxml:-‹textField› ‹reportElement x=146 y=0 width=89 height=20 uuid=59ea6b83-7961-47d7-9e0a-b3e9dae6476b/› ‹textElement› ‹font fontName=Kruti Dev 011 pdfEncoding=Identity-H isPdfEmbedded =true/› ‹/textElement› ‹textFieldExpression›‹![CDATA[$F{DISTRICT_NAME_HINDI}]]›‹/textFieldExpression› ‹/textField› - person Priyesh Mishra; 15.12.2015
comment
@Priyesh Mishra Я отредактировал ответ, ваш TTF недействителен (это зависит от того, что существуют разные типы TTF ....), проверьте редактирование - person Petter Friberg; 15.12.2015
comment
Сэр, я загрузил ваш файл jar и установил путь к классу, использовал имя шрифта = lohit devnagri, это был результат: - Ошибка экспорта печати... Identity-H ExceptionConverter: java.io.UnsupportedEncodingException: Identity-H на java.lang. StringCoding.encode(StringCoding.java:340) в java.lang.String.getBytes(String.java:955) - person Priyesh Mishra; 15.12.2015
comment
@Priyesh Mishra Проблема, вероятно, в том, что у вас уже есть другое определение Лохита Деванагари, попробуйте это выяснить; загрузите это расширение шрифта jdd.it/stacktrace/LohitDevanagari_EXT.jar и используйте fontName=Lohit Devanagari Ext, это не будет работать в iReport, но если вы установите путь к классам, ваш экспорт должен работать. - person Petter Friberg; 15.12.2015
comment
когда я использовал LohitDevnagri_EXT, вывод был: - at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) net.sf.jasperreports.engine.util.JRFontNotFoundException: шрифт «Lohit Devanagari Ext» недоступен для JVM. См. Javadoc для более подробной информации. и PDF не был сгенерирован - person Priyesh Mishra; 16.12.2015
comment
еще одна вещь, которую я хочу упомянуть, что я использую DB2 в качестве базы данных, а поле столбца таблицы - VARGRAPHICS. Может ли это вызвать проблему?? - person Priyesh Mishra; 16.12.2015
comment
Шрифт «Lohit Devanagari‌​ Ext» недоступен для JVM, вы не добавили файл LohitDevanagari_EXT.jar в свой путь к классу, ссылаясь на VARGRAPHICS, сначала проверьте какой-нибудь простой пример (чтобы решить проблему со шрифтом), а затем переместите его в VARGRAPHICS, вы не следует писать код, который должен писать код, содержащий специальные символы, лучше использовать обозначения es. Č, но я думаю, что это второстепенная проблема - person Petter Friberg; 16.12.2015
comment
Большое спасибо, сэр. Я использовал программное обеспечение jasper studio, и отчет работал нормально. я думаю, что была проблема с кодировкой PDF в i-report 5.5. Кстати, проблема все еще сохраняется, когда я использую свое веб-приложение для вывода отчета. - person Priyesh Mishra; 16.12.2015
comment
@Priyesh Mishra Добавьте банку расширения шрифта в веб-приложение. - person Petter Friberg; 16.12.2015
comment
добавлен в папку .m2 и создал зависимость в pom.xml, но не работает - person Priyesh Mishra; 17.12.2015
comment
Убедитесь, что правильный jar расширения шрифта находится в пути к классам (или включите шрифт .tff, fontFamilies.xml, jasperreports_extension.properties непосредственно в свой проект). - person Petter Friberg; 17.12.2015
comment
добавлен правильный файл расширения шрифта в моем веб-приложении, все еще бесполезно - person Priyesh Mishra; 18.12.2015
comment
Проблема была решена, когда я прикрепил файл jar как внешний файл . Большое спасибо за вашу помощь и руководство - person Priyesh Mishra; 21.12.2015
comment
@PetterFriberg, не могли бы вы опубликовать образец jrxml и jar? - person S_S; 08.06.2017
comment
@Sumit банка, которую я использовал, уже есть в сообщении (ссылки все еще активны), например, я не уверен, чего вы ожидаете, просто установите fontName="Lohit Devanagari", если вы используете эту банку. - person Petter Friberg; 08.06.2017
comment
@PetterFriberg Не могли бы вы взглянуть, что я делаю неправильно? stackoverflow.com/questions/44428641/jrxml-hindi-text -в pdf - person S_S; 08.06.2017
comment
@Sumit Я сделал, и я видел ваши отзывы об этом ответе, просто интересно, почему, если вы хотите поделиться. - person Petter Friberg; 08.06.2017

это сработало для меня

IndicLigaturizer  hindi = new DevanagariLigaturizer();
String result = hindi.process(string);
person Yogesh Paliyal    schedule 05.12.2018
comment
Спасибо, я потратил дни на это. - person Lathesh; 27.05.2021

У меня такая же проблема, я решаю ее с помощью шрифта gargi.ttf. скачайте здесь с этим конфигурация

"gargi" => array(
        'R' => "gargi.ttf",
        'useOTL' => 0xFF,
    ),
person Community    schedule 04.07.2018