У нас есть приложение, которое позволяет нашим пользователям создавать готовые к печати 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 эквивалентно окнам GetFontData?
Спасибо