【发布时间】: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 等价物是什么?
谢谢
【问题讨论】: