【问题标题】:Is there a Mac OSX version of windows GetFontData function?是否有 Mac OSX 版本的 windows GetFontData 功能?
【发布时间】:2011-08-17 19:50:03
【问题描述】:

我们的应用程序允许我们的用户使用客户通过在线电子商务网站输入的可变数据(姓名、职务、电话号码等)生成可打印的 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 等价物是什么?

谢谢

【问题讨论】:

    标签: c++ qt fonts


    【解决方案1】:

    最新的(直到 Apple 雇佣新的字体人员并再次感染非发明疾病)文本和字体 API 是 Core Text。我从未使用过它,因为追逐 Apple 的情绪对我的个人和组织的财务健康有害,所以我停止使用任何 Apple 专用 API。 :)

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

    【讨论】:

      【解决方案2】:

      我只浏览了GetFontData 的文档,而且我对 Qt 了解不多(尽管它听起来确实像 Qt 解决方案更可取),但您可能想查看 ObjC 字体类, NSFont.

      【讨论】:

      • 谢谢。我们查看了 NSFont 和 NSGraphicsContext 以及来自 ATSUI 的函数,例如 ATSFontActivateFromFileReference,但均无济于事。不过,我们不是经验丰富的 mac 开发人员,可能会遗漏一些基本概念。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2011-02-13
      • 2011-06-30
      • 2018-09-29
      • 2011-04-24
      • 2017-05-10
      • 2012-01-03
      相关资源
      最近更新 更多