我正在使用免费的 pdf 库 libharu 来生成 PDF 文件,但是我遇到了编码问题,我无法在 PDF 文件上绘制泰语文本,所有文本都显示“???..”
有人知道如何解决吗?谢谢
我正在使用免费的 pdf 库 libharu 来生成 PDF 文件,但是我遇到了编码问题,我无法在 PDF 文件上绘制泰语文本,所有文本都显示“???..”
有人知道如何解决吗?谢谢
我已经成功地使用 libharu 渲染了象形文字(不是泰文,而是中文和日文)。首先,我使用的是Unicode模式,请参考HPDF_UseUTFEncodings ()函数文档。
对于 C 语言,这里有一系列 libharu API 调用来解决您的问题:
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 文本。还要注意嵌入标志(LoadTTFontFromFile 的第三个参数) - 由于外部字体引用,您的 PDF 文件可能不可读。如果您对输出 PDF 大小不感兴趣,您可以只嵌入字体。
我已经测试了在 Google 中找到的几个泰语 .ttf 字体,它们的渲染效果很好。另外(这可能很重要,但我不确定)我正在使用 libharu 的 fork https://github.com/kdeforche/libharu,它现在已合并到 master 分支中。
将文本写入 PDF 时,请使用正确的字体和编码。在 libharu 文档中,您拥有所有可能性:https ://github.com/libharu/libharu/wiki/Fonts
在您的情况下,您必须使用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]);