Я создаю приложение Qt, которое пишет файл PDF, используя libharu. Шрифт true-type-font, используемый в файле PDF, должен быть встроен в двоичный файл, поэтому он доступен на всех платформах. Для этого я хочу использовать систему ресурсов Qt.
Файл шрифта должен использоваться следующим образом
const char* fontName = HPDF_LoadTTFontFromFile(doc,"path/to/myfont.ttf",HPDF_TRUE);
documentFont = HPDF_GetFont(doc,fontName,"ISO8859-2");
где я хочу, чтобы имя файла и путь были заменены именем ресурса (например, :/fonts/myfont.ttf
).
Есть ли способ добиться этого?
Варианты, о которых я думаю:
Есть ли другие более простые решения для этого? Благодарю.
На самом деле второй вариант оказался проще, чем ожидалось. С ответом robin.thoni а также этот вопрос, Я получил это довольно простое решение:
std::string fontFile = std::tmpnam(nullptr);
QFile::copy(":/fonts/myfont.ttf",QString::fromStdString(fontFile));
const char* fontName = HPDF_LoadTTFontFromFile(doc,fontFile.c_str(),HPDF_TRUE);
Как вы можете видеть здесь Как получить доступ к изображению ресурса с помощью fopen?, нет способа «открыть» файл ресурса Qt с помощью стандартного open / fopen, поэтому вы не сможете создать правильный путь к нему. Вам нужно будет использовать ваш второй вариант. Вы могли бы использовать станд :: tmpnam добиться этого.
Других решений пока нет …