2017-02-27 87 views
0

我正在研究一個C#.NET WPF桌面應用程序,該應用程序將生成需要非特定字體的PDF,該字體不會安裝在系統上。我正在使用PdfSharp-WPF v1.32。文件importantSc.ttf位於項目資源文件夾中。在PDFsharp中使用私有TTF字體

我最好的選擇是我的URI路徑是錯誤的,但我認爲我是正確的。我的字體系列名稱是正確的,因爲它在字體安裝在我的開發計算機上時工作正常。

using System; 
using PdfSharp.Drawing; 
using PdfSharp.Pdf; 
using PdfSharp.Pdf.IO; 
using Microsoft.Win32; 
using PdfSharp.Drawing.Layout; 
using System.Collections.Generic; 
using System.Windows.Input; 
using System.Windows; 

namespace MyProject 
{ 
    public class MyPdfFile 
    { 
     private PdfDocument doc; 

     public void MakePdf() 
     { 
      Double x1, y1;  
      XBrush brush = XBrushes.Black; 
      XGraphics xgf = XGraphics.FromPdfPage(page); 
      doc = new PdfDocument(); 
      PdfPage page = doc.AddPage(); 

      // Load in a private font to use. 
      XPrivateFontCollection privateFontCollection = new XPrivateFontCollection(); 
      String fontFamilyName = "Important Script AM"; 
      String fontUriPath = @"pack://application:,,,/importantSc.ttf"; 

      Uri fontUri = new Uri(fontUriPath); 
      privateFontCollection.Add(fontUri, "./#" + fontFamilyName); 

      XFont font = new XFont(fontFamilyName, 9, XFontStyle.Regular); // <-- the error happens here 

      //Add text to page 
      x1 = 1.96 * 72; 
      y1 = 3.25 * 72; 
      String printString = "I wish this would work!"; 
      xgf.DrawString(printString, font, brush, x1, y1); 

      xgf.Dispose(); 
     } 
    } 
} 

我收到以下錯誤:

'System.InvalidOperationException' 類型的未處理的異常發生在PdfSharp-WPF.dll

其他信息:無法獲取匹配字形字體爲'重要腳本AM'。

回答

0

您不問任何問題。
以下是一些注意事項。

使用PDFsharp 1.50(目前爲beta 3b)字體處理效果更好。我會使用1.50,因爲我認爲新測試版比舊的「穩定版」更好。
使用IFontResolver可以避免處理「pack:」資源語法。

您可以使用JetBrains的DotNetPeek等工具來檢查TTF是否真的嵌入程序集中,並且使用哪個名稱。

您可以使用PDFsharp的源代碼包並通過privateFontCollection.Add進行調試,以查看它是否可以找到字體以及是否可以找到哪些字體。

使用MCVE我可以幫助您調試。
https://stackoverflow.com/help/mcve