Как нарисовать тайский текст в PDF-файл с помощью библиотеки libharu - PullRequest
1 голос
/ 31 июля 2010

Я использую бесплатную библиотеку pdf libharu для создания PDF-файла, но у меня проблема с кодировкой, я не могу нарисовать текст на тайском языке в PDF-файле, весь текст показывает "??? .."

Кто-нибудь знает, как это исправить?Спасибо

Ответы [ 2 ]

1 голос
/ 24 марта 2015

Мне удалось воспроизвести иероглифические тексты (не тайские, а китайские и японские) с использованием libharu.Прежде всего, я использовал Unicode-режим, пожалуйста, обратитесь к HPDF_UseUTFEncodings () документации по функциям.

Для языка C вот последовательность вызовов API libharu, необходимых для преодоления вашей проблемы:*

HPDF_UseUTFEncodings(docHandle);
HPDF_SetCurrentEncoder(docHandle, "UTF-8");

Здесь docHandle является действительным HPDF_Doc объектом.

Следующая часть - правильная работа со шрифтами UTF:

const char * libFontName = HPDF_LoadTTFontFromFile(docHandle, fontFileName.c_str(), font_embed::EmbedFonts);
HPDF_Font font = HPDF_GetFont(docHandle, libFontName, "UTF-8");

После этих вызовов вы можете отобразить Unicodeтексты, содержащие тайские символы.Также обратите внимание на флаг встраивания (3-й параметр LoadTTFontFromFile) - ваш файл PDF может быть нечитаемым из-за внешних ссылок на шрифты.Если вы не в восторге от выходного размера PDF, вы можете просто встроить шрифты.

Я протестировал несколько тайских .ttf-шрифтов, найденных в Google, и они были отредактированы.Также (это может быть важно, но я не уверен) я использую форк libharu https://github.com/kdeforche/libharu, который теперь объединен с главной веткой.

0 голосов
/ 05 апреля 2011

Когда вы пишете текст в PDF, используйте правильный шрифт и кодировку.В документации по libharu у вас есть все возможности: http://libharu.sourceforge.net/fonts.html

В вашем случае вы должны использовать ISO8859-11 Thai, TIS 620-2569 character set

Пример (на испанском):

    HPDF_Font fontEn = HPDF_GetFont(pdf, "Helvetica-Bold", "ISO8859-2");
    HPDF_Page_TextOut(page1, 50.00, 750.00, [@"Código para correcta codificación en libharu" cStringUsingEncoding:NSISOLatin1StringEncoding]);
...