首页 文章

MigraDoc / PDFsharp使用中文YaHei字体抛出异常

提问于
浏览
0

最近,在将我们的网站从Windows Server 2008迁移到Server 2016之后,我们开始面临从使用MigraDoc / PDFsharp库的C#代码导出PDF文档的问题 .
问题也可以在Windows 10上重现 . 完全相同的代码在Windows 7上运行得很好,或者如前所述,在Server 2016之前的任何服务器操作系统 .
以前我们得到了这个例外:

解析OpenType字体时出错 . InnerException:InvalidOperationException:Font没有可用的平台或编码ID . 它不能与PDFsharp一起使用 .

所以我们尝试升级对最新汇编版本的引用,现在我们得到了一个不同的错误:

PDFsharp尚不支持TrueType集合字体 .

请不要跳枪并将其标记为中文字符显示为正方形或其他一些问题的副本 . 在导出的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

    错误消息告诉它:尚不支持字体集合(扩展名.ttc),支持TrueType字体(扩展名.ttf) .

    因此,解决方法可能是使用较旧Windows版本的字体文件,因为它们似乎与当前版本的PDFsharp兼容 .
    在Windows的Fonts文件夹中安装旧Windows版本的字体可能会出现问题 .
    PDFsharp / MigraDoc的WPF版本的 IFontResolver 接口允许使用计算机上未安装的字体 . 也许试试EZFontResolver来保持简单:forum.pdfsharp.net/viewtopic.php?f = 8&t = 3244

    添加对字体集合的支持似乎并不复杂,但有人必须实现它 . 今天的当前版本1.50.4845-RC2a尚不支持它们 .

相关问题