Чтение содержимого файла шрифта в WinRT

Как прочитать поток файлов шрифтов с платформы WinRT? Мне нужно получить содержимое файла шрифта из C# UWP. Насколько вы, вероятно, знаете, нет возможности напрямую читать файлы из папки Fonts. FilePicker также не вариант для меня, так как это не ответственность пользователя, чтобы выбрать эту папку. Я нашел способ перечислять имена шрифтов с помощью DirectWrite (C++), а затем обернуть его COM-компонентом, который будет доступен в C# ( https://code.msdn.microsoft.com/FontExplorer-lets-you-f01d415e), Интересно, можно ли сделать подобное, чтобы прочитать содержимое файла шрифта как byte[] или Stream?

3 ответа

Предполагая, что вы уже получили, насколько вы создали IDWriteFontFile например, тогда легко прочитать произвольный фрагмент файла:

  1. Получить ссылку на файл с помощью IDwriteFontFile::GetReferenceKey();,
  2. Получить интерфейс загрузчика с IDWriteFontFile::GetLoader();
  3. Создать экземпляр потока с IDWriteFontFileLoader::CreateStreamFromKey() используя ключ из шага 1.
  4. использование IDWriteFontFileStream::ReadFileFragment/ReleaseFileFragment читать из файлового потока в ваш буфер.

Вы не можете напрямую прочитать файл TTF из приложения UWP, если пользователь не перейдет к файлу вручную. Приложение UWP не может открывать файлы без запроса пользователя, если они не находятся в определенных местах.

Также, как упоминалось в комментарии, многие шрифты не могут распространяться или внедряться без специальных лицензий.

Хорошие новости: экспорт PDF не имеет особого смысла в Windows 10. Windows 10 имеет встроенный PDF-принтер. Итак, лучше убить двух зайцев одним выстрелом: осуществить печать и получить экспорт в PDF бесплатно.

Другие вопросы по тегам