我正在创建一个使用libharu编写 pdf 文件的 Qt 应用程序。pdf 文件中使用的 true-type-font 应嵌入到二进制文件中,因此在所有平台上都可用。为此,我想使用 Qt 资源系统。
字体文件应该使用如下
const char* fontName = HPDF_LoadTTFontFromFile(doc,"path/to/myfont.ttf",HPDF_TRUE);
documentFont = HPDF_GetFont(doc,fontName,"ISO8859-2");
我希望将文件名和路径替换为资源名称(例如:/fonts/myfont.ttf
)。有没有办法做到这一点?
我想到的选项:
- 以某种方式将文件内容作为字符串或字符数组传递(如这里所建议的那样)。这是不可能的,因为libharu中的函数需要文件名。没有需要实际文件内容的功能。
- 将资源内容保存到临时文件中,在libharu函数中使用临时文件名。
还有其他更简单的解决方案吗?谢谢。
解决方案:
实际上,第二种选择比预期的要容易。通过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);