是否有Mac OSX版本的Windows GetFontData功能?

时间:2011-05-03 15:22:50

标签: c++ qt fonts

我们有一个应用程序,允许我们的用户使用客户通过在线电子商务网站输入的可变数据(姓名,职位,电话号码等)生成可打印的PDF文档。为了方便可变数据,我们必须嵌入字体的整个字符映射。在Windows上我们一直在使用Windows API函数GetFontData(...):

#ifdef Q_WS_WIN
    //this is windows specific code
    HDC DC = CreateCompatibleDC(NULL);
    HFONT hFont = font.handle();
    HFONT oFont=(HFONT)SelectObject(DC,hFont);

    DWORD fontLength = ::GetFontData(DC, 0, 0, 0, 0);

    if(fontLength != GDI_ERROR)
    {
        fontData.GrowAllocation(fontLength);

        if(::GetFontData(DC, 0, 0, fontData.GetBuffer(), fontLength) == GDI_ERROR)
        {
            fontData.Clear();
        }
        else
        {
            fontData.SetLength(fontLength);
            returnVal = true;
        }
    }

    SelectObject(DC,oFont);
    DeleteDC(DC);
    //End of windows specific code
#elif defined(Q_WS_MAC)



#endif

这种技术在我们的Windows特定版本上非常成功;但是,我们正在将应用程序移植到Qt以定位Mac OSX平台。

我的第一个问题:是否有Qt方式从QFont,QFontDatabase等访问原始字体数据,我们可以使用它来嵌入pdf?我们一直无法找到办法。请注意上面代码中的#ifdef包装器。请注意,变量fontData是一个自包含的内存缓冲区,用于管理自己的内存,请忽略。

我的第二个问题:如果没有以与操作系统无关的方式访问字体数据的Qt方式,那么OSX相当于windows GetFontData?

由于

2 个答案:

答案 0 :(得分:0)

我只浏览了GetFontData的文档,我对Qt知之甚少(虽然它听起来像Qt解决方案会更好),但你可能想看一下ObjC类字体,NSFont

答案 1 :(得分:0)

最新版本(直到Apple雇用新版字体并再次感染未发明的疾病)文字和字体API为Core Text。我从未使用它,因为追逐Apple的心情对我的个人和组织的财务状况有害,我停止使用任何Apple专用API。 :)

除了开玩笑,看起来CTFont确实提供了对字体中所有表的访问。我没有看到任何准备嵌入字体的东西,但这可能会给你最好的机会。