Чтение содержимого файла шрифта в WinRT
Как прочитать поток файлов шрифтов с платформы WinRT? Мне нужно получить содержимое файла шрифта из C# UWP. Насколько вы, вероятно, знаете, нет возможности напрямую читать файлы из папки Fonts. FilePicker также не вариант для меня, так как это не ответственность пользователя, чтобы выбрать эту папку. Я нашел способ перечислять имена шрифтов с помощью DirectWrite (C++), а затем обернуть его COM-компонентом, который будет доступен в C# ( https://code.msdn.microsoft.com/FontExplorer-lets-you-f01d415e), Интересно, можно ли сделать подобное, чтобы прочитать содержимое файла шрифта как byte[] или Stream?
3 ответа
Предполагая, что вы уже получили, насколько вы создали IDWriteFontFile
например, тогда легко прочитать произвольный фрагмент файла:
- Получить ссылку на файл с помощью
IDwriteFontFile::GetReferenceKey();
, - Получить интерфейс загрузчика с
IDWriteFontFile::GetLoader();
- Создать экземпляр потока с
IDWriteFontFileLoader::CreateStreamFromKey()
используя ключ из шага 1. - использование
IDWriteFontFileStream::ReadFileFragment/ReleaseFileFragment
читать из файлового потока в ваш буфер.
Вы не можете напрямую прочитать файл TTF из приложения UWP, если пользователь не перейдет к файлу вручную. Приложение UWP не может открывать файлы без запроса пользователя, если они не находятся в определенных местах.
Также, как упоминалось в комментарии, многие шрифты не могут распространяться или внедряться без специальных лицензий.
Хорошие новости: экспорт PDF не имеет особого смысла в Windows 10. Windows 10 имеет встроенный PDF-принтер. Итак, лучше убить двух зайцев одним выстрелом: осуществить печать и получить экспорт в PDF бесплатно.