Jon*_*ith 4 c# wpf fonts pdfsharp
我试图使用私有文本添加文本到PDF文档,即没有安装在系统上,TrueType字体和麻烦.我正在使用NuGet的PDFSharp + MigraDoc WPF版本1.32.2608.0.
我在论坛和StackOverFlow上找到了很多项目.最新的是这篇stackoverflow文章,它引用了PdfSharp网站上的这个例子.但是,此示例包含以下代码:
this.fontFamilies.Add(key, fontFamily);
Run Code Online (Sandbox Code Playgroud)
在第22行,但我在汇编中找不到任何对fontFamilies的引用.
因此,我遵循了一个看起来很好的例子,但它对我不起作用.当我使用这种方法时,我可以成功添加字体但是当我来使用命令时:
var font = new XFont(fontStyle.Name, new XUnit(fontStyle.SizePt, XGraphicsUnit.Point), XFontStyle.Regular, _fontOptions);
Run Code Online (Sandbox Code Playgroud)
fontStyle.Name
前面没有#的字体名称在哪里?此时,PdfSharp private void Initialise()
在PdfSharp.Drawing命名空间内的方法内部中断.
此时检查Initialise
方法内的变量它具有:
this.family != null
this.typeface != null
我假设它在线上突破if (!typeface2.TryGetGlyphTypeface(out typeface))
但我无法确定.
注意:我已经尝试过.ttf和.otf字体无济于事.
有人能指出我正确的方向吗?
最后我换成了PDFSharp WPF 1.50 beta,因为它的字体处理要好得多.请参阅我在第二期的SO帖子以及解决我的问题的新字体解析器的信息.现在一切都运转良好.
好吧,答案是相当复杂的,但如果它能帮助别人,那么这就是答案.
如果您想使用私有字体,即您系统上尚未安装的字体,使用PDFSharp,则需要执行以下操作.
目前,2015年3月,唯一发布的使用私有字体的NuGet库是PDFsharp + MigraDoc(WPF)1.32.2608版本.1.50有很多beta版本,但这个答案大约是1.32版本.
Debugger.Break
而不是异常,在发布的代码中它只是停顿 - 在我的单元测试中我必须关闭Visual Studio才能摆脱它!注意:在字体名称上,在Windows中找到它的最佳方法是双击字体文件.Windows然后会在第一行显示名称中带有名称的字体.正如我所说,做错了,你可以得到一个停滞不前的系统.
最后,我要感谢@ThomasH,他指导我使用PDFSharp 1.32源代码.这有私人字体的"正确"示例,并且没有那么讨厌,Debugger.Break
但是当您要求的字体名称不存在时,这是正确的例外.
最后我换成了PDFSharp WPF 1.50 beta,因为它的字体处理要好得多.关于我的问题和有关新帮助的字体解析器的信息,请参阅此SO帖子.
对于 PDFsharp 1.50,您必须实现IFontResolver
接口并将您的实现分配给全局 PDFsharp 属性。
GlobalFontSettings.FontResolver = new DemoFontResolver();
Run Code Online (Sandbox Code Playgroud)
PDFsharp 提供了一个 FontResolverBase 类,您可以使用它来派生自己的类。只需为您的私有字体添加代码并将调用传递给其他字体的基类。
IFontResolver 接口需要两个方法:ResolveTypeface
和GetFont
。
更多信息可以在我的博客文章中找到:http :
//developer.th-soft.com/developer/?p=11
那里以 ZIP 文件的形式提供了一个完整的解决方案。