我们有一个应用程序,允许我们的用户使用客户通过在线电子商务网站输入的可变数据(姓名,职位,电话号码等)生成可打印的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?
由于