[英]How to use private fonts in PDFSharp
我試圖使用私有文本添加文本到PDF文檔,即沒有安裝在系統上,TrueType字體和麻煩。 我正在使用NuGet的PDFSharp + MigraDoc WPF版本1.32.2608.0。
我在論壇和StackOverFlow上找到了很多項目。 最新的是這篇stackoverflow文章,它引用了PdfSharp網站上的這個例子 。 但是,此示例包含以下代碼:
this.fontFamilies.Add(key, fontFamily);
在第22行,但我在匯編中找不到任何對fontFamilies的引用。
因此,我遵循了一個看起來很好的例子 ,但它對我不起作用。 當我使用這種方法時,我可以成功添加字體但是當我來使用命令時:
var font = new XFont(fontStyle.Name, new XUnit(fontStyle.SizePt, XGraphicsUnit.Point), XFontStyle.Regular, _fontOptions);
其中fontStyle.Name
是前面沒有#的字體名稱。 此時,PdfSharp在PdfSharp.Drawing命名空間內的private void Initialise()
方法內部中斷。
此時檢查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();
PDFsharp提供了一個FontResolverBase類,您可以使用它來派生自己的類。 只需為您的私有字體添加代碼,並將調用傳遞給其他字體的基類。
IFontResolver接口需要兩個方法: ResolveTypeface
和GetFont
。
更多信息可以在我的博客文章中找到:
http://developer.th-soft.com/developer/?p=11
這里提供了一個完整的解決方案作為ZIP文件。
重新“第22行”:PDFsharp論壇只顯示示例中的一個片段。
對於PDFsharp 1.3x:您可以從CodePlex或SourceForge下載完整的示例代碼,其中包含完整的工作示例(包括項目,解決方案,示例TTF文件)。
也可以看看:
https://stackoverflow.com/a/21545488/1015447
版本1.32的完整源代碼:
http://pdfsharp.codeplex.com/releases
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.