如何在libharu中使用Qt资源获取ttf字体?

时间:2016-09-06 15:25:03

标签: c++ qt embedded-resource libharu

我正在创建一个使用 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)。 有没有办法实现这个目标?

我想到的选项:

  • 以某种方式将文件内容作为字符串或char数组传递(建议here)。这是不可能的,因为 libharu 中的函数需要文件名。没有需要实际文件内容的功能。
  • 将资源内容保存到临时文件,并使用 libharu 函数中的临时文件名。

还有其他更简单的解决方案吗?感谢。

解决方案:

实际上第二种选择比预期的要容易。通过robin.thonithis question的答案,我获得了这个非常简单的解决方案:

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);

1 个答案:

答案 0 :(得分:0)

正如您在How to access resource image with fopen?看到的那样,没有办法打开'使用标准open / fopen的Qt资源文件,因此您无法为其创建有效路径。您需要使用第二个选项。您可以使用std::tmpnam来实现它。