在winrt中读取字体文件内容

时间:2015-11-05 03:43:12

标签: c# c++ fonts windows-runtime directwrite

如何从WinRT平台读取字体文件流?我需要从C#UWP获取字体文件内容。据您所知,无法直接从Fonts文件夹中读取文件。 FilePicker对我来说也不是一个选项,因为选择此文件夹不是用户的责任。我找到了使用DirectWrite(C ++)枚举字体名称的方法,然后使用可在C#(https://code.msdn.microsoft.com/FontExplorer-lets-you-f01d415e#content)中使用的COM组件包装它,我想知道是否可以将字体文件内容作为字节读取类似的事情[]或Stream?

3 个答案:

答案 0 :(得分:0)

如果没有用户手动导航到文件,您无法直接从UWP应用程序读取TTF文件。如果没有提示用户,UWP应用程序不允许打开文件,除非它们位于特定位置。

此外,正如评论中所述,如果没有特殊许可,许多字体可能无法分发或嵌入。

答案 1 :(得分:0)

好消息:PDF导出在Windows 10中没有多大意义.Windows 10具有内置PDF打印机。因此,最好一石二鸟:实施打印并免费获得PDF导出。

答案 2 :(得分:0)

假设您已经创建了IDWriteFontFile实例,那么很容易读取任意文件片段:

  1. 使用IDwriteFontFile::GetReferenceKey();获取文件参考密钥。
  2. 使用IDWriteFontFile::GetLoader();
  3. 获取加载程序界面
  4. 使用步骤1中的密钥使用IDWriteFontFileLoader::CreateStreamFromKey()创建流实例。
  5. 使用IDWriteFontFileStream::ReadFileFragment/ReleaseFileFragment从文件流中读取缓冲区。