【问题标题】:How to draw Thai text to PDF file by using libharu library如何使用 libharu 库将泰语文本绘制为 PDF 文件
【发布时间】:2010-07-31 02:57:18
【问题描述】:

我正在使用免费的 pdf 库 libharu 来生成 PDF 文件, 但我有一个编码问题,我无法在 PDF 文件上绘制泰语文本, 所有文字都显示“???..”

有人知道怎么解决吗? 谢谢

【问题讨论】:

    标签: libharu


    【解决方案1】:

    我已经成功地使用 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 的第 3 个参数) - 由于外部字体引用,您的 PDF 文件可能不可读。如果您对输出 PDF 大小不感兴趣,您可以只嵌入字体。

    我已经测试了在 Google 中找到的几个泰语 .ttf 字体,它们的渲染效果很好。另外(这可能很重要,但我不确定)我正在使用 libharu https://github.com/kdeforche/libharu 的 fork,它现在已合并到 master 分支中。

    【讨论】:

      【解决方案2】:

      将文本写入 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]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 2012-01-19
        • 2011-08-13
        • 1970-01-01
        • 2022-10-02
        • 1970-01-01
        相关资源
        最近更新 更多