0

我正在创建一个使用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);
4

1 回答 1

0

如您所见,如何使用 fopen 访问资源图像?,没有办法使用标准的 open/fopen 来“打开”一个 Qt 资源文件,所以你将无法为它设计一个有效的路径。您将需要使用第二个选项。您可以使用std::tmpnam来实现它。

于 2016-09-07T01:04:11.610 回答