MigraDoc / PDFsharp выбрасывает исключения с китайским шрифтом YaHei - PullRequest
0 голосов
/ 13 октября 2018

Недавно после перемещения нашего веб-сайта с Windows Server 2008 на Server 2016 мы столкнулись с проблемами при экспорте документов PDF из нашего кода C #, использующего библиотеку MigraDoc / PDFsharp.
Проблема также может быть воспроизведена в Windows 10. Точно такой же код работаетотлично подходит для Windows 7 или, как упоминалось ранее, любой серверной ОС до Server 2016.
Ранее мы получали это исключение:

Ошибка при синтаксическом анализе шрифта OpenType.InnerException: InvalidOperationException: у шрифта нет используемой платформы или идентификатора кодировки.Его нельзя использовать с PDFsharp.

Поэтому мы попытались обновить ссылки до последней версии сборки, и теперь мы получаем другую ошибку:

Шрифты TrueType коллекцииPDFsharp еще не поддерживается.

Пожалуйста, не прыгайте с пистолетом и пометьте это как дубликат некоторых других проблем, когда китайские иероглифы отображаются в виде квадратов или ???в экспортированном PDF.Это не проблема встраивания шрифта.Это отличается от этого.Почему-то в Windows 10 и Server 2016, если вы попытаетесь использовать шрифт Microsoft Ya Hei (微软 雅 黑), он просто не будет работать.Достаточно странно, что все работало нормально с тем же кодом в той же сборке версии до перехода на Server 2016. Вот соответствующий код без атрибутов

.
.
.
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
.
.

Document document = new Document();
document.Info.Title = "Report";
document.Styles["Normal"].Font.Name = "微软雅黑";   // Microsoft YaHei Chinese Font

Section section = document.AddSection();
document.LastSection.AddParagraph("### This font is: 微软雅黑");

PdfDocumentRenderer renderer = new PdfDocumentRenderer(true);
renderer.Document = document;

renderer.RenderDocument();
renderer.PdfDocument.Save(@"Test.pdf");

Может кто-нибудь помочь мне понять общую картину: что изменилось в отношениина китайские шрифты и что именно здесь происходит?

1 Ответ

0 голосов
/ 13 октября 2018

Сообщение об ошибке говорит о том, что коллекции шрифтов (расширение .ttc) еще не поддерживаются, шрифты TrueType (расширение .ttf) поддерживаются.

Таким образом, можно использовать файлы шрифтов из более старой Windows.версии, так как они кажутся совместимыми с текущей версией PDFsharp.
Возможны проблемы при установке шрифтов из более старых версий Windows в папке «Шрифты» Windows.
Интерфейс IFontResolver сборки WPF PDFsharp / MigraDocпозволяет использовать шрифты, которые не установлены на компьютере.Возможно, попробуйте EZFontResolver для простоты: forum.pdfsharp.net/viewtopic.php?f=8&t=3244

Добавление поддержки для коллекций шрифтов кажется не очень сложным, но кто-то должен это реализовать.Текущая версия 1.50.4845-RC2a пока не поддерживает их.

...