美文网首页
OSX 系统中使用PDF绘制库libharu --- 小记

OSX 系统中使用PDF绘制库libharu --- 小记

作者: lyuting | 来源:发表于2018-01-09 10:50 被阅读0次
  • 使用Xcode编译器,下面代码输出中文乱码:


// ...省略创建pdf和page的步骤

char *out_txt = "简体中文";

HPDF_UseCNSFonts(pdf);

HPDF_UseCNSEncodings(pdf);

HPDF_Font font = HPDF_GetFont(pdf, "SimHei", "GB-EUC-H");

HPDF_Page_SetFontAndSize(page, font, 14);

HPDF_Page_BeginText(page);

HPDF_Page_TextOut(page, 0, 100, out_txt);

HPDF_Page_EndText(page);

Xcode默认使用UTF-8编码,out_txt就不是GB/GBK编码,所以需要将out_txt转换为GBK编码,转换代码如下


char *utf_2_gbk(char *in_buf, size_t in_len) {

    iconv_t cd = iconv_open("GBK", "UTF-8");

    if (cd == (iconv_t)-1) {

        perror("获取字符转换描述符失败!\n");

        return NULL;

    }

    size_t sz = in_len * in_len;

    char *tmp_str = (char *)malloc(sz);

    // 不要将原始的指针传进去,那样会改变原始指针的

    size_t inlen = in_len;

    size_t outlen = sz;

    char *in = in_buf;

    char *out = tmp_str;

    if (tmp_str == NULL) {

        iconv_close(cd);

        fprintf(stderr, "分配内存失败!\n");

        return NULL;

    }

    memset(tmp_str, 0, sz);

    if (iconv(cd, &in, &inlen, &out, &outlen) == (size_t)-1) {

        iconv_close(cd);

        return NULL;

    }

    iconv_close(cd);

    return tmp_str;

}

最后,只需要在char *out_txt = "简体中文";后添加一句char * c_out_txt = utf_2_gbk(out_txt, strlen(out_txt));

然后将输出的out_txt改为c_out_txt即可解决问题.

附Win平台下的解决方法

相关文章

网友评论

      本文标题:OSX 系统中使用PDF绘制库libharu --- 小记

      本文链接:https://www.haomeiwen.com/subject/ubdwnxtx.html