2016-05-23 15 views
0

私はアズールのWebApplicationウェブサイト上でArialフォントを使用していますが、私はこの行を取得する場合:私のウェブサイトでPDFsharpのフォントを使用するには?

MainFont = new XFont("Arial", FontSize); 

それは例外読書をスロー:Font data could not retrieved.

私はゴシックがインストールされているだろうと思っているだろうサーバー上で...私はまた、Sans-Serifに変更して、Microsoftが生成したWebサイトのデフォルトのフォントと一致させようとしました...しかし、それでも失敗します。

また、Arial.ttfをプロジェクトに追加しようとしましたが、それはうまくいきませんでした。

答えて

0

ポインタ@PDFSharpチームに感謝します。 - 私の例では、私が埋め込まれたリソース(プロパティ - >アクションの構築)など、各フォントファイルを設定しMyProject\fonts\arial\arial.ttfなどでArialを入れて下に

プロジェクトにしたいフォントを追加します。ここではPdfSharp 1.5 beta3bのための私の実装があります。

フォントリゾルバは一度だけ、このような静的呼び出し使用して適用します。

MyFontResolver.Apply(); // Ensures it's only applied once 

はここでフォントリゾルバクラスです:

class MyFontResolver : IFontResolver 
{ 
    public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic) 
    { 
     // Ignore case of font names. 
     var name = familyName.ToLower().TrimEnd('#'); 

     // Deal with the fonts we know. 
     switch (name) 
     { 
      case "arial": 
       if (isBold) 
       { 
        if (isItalic) 
         return new FontResolverInfo("Arial#bi"); 
        return new FontResolverInfo("Arial#b"); 
       } 
       if (isItalic) 
        return new FontResolverInfo("Arial#i"); 
       return new FontResolverInfo("Arial#"); 
     } 

     // We pass all other font requests to the default handler. 
     // When running on a web server without sufficient permission, you can return a default font at this stage. 
     return PlatformFontResolver.ResolveTypeface(familyName, isBold, isItalic); 
    } 

    /// <summary> 
    /// Return the font data for the fonts. 
    /// </summary> 
    public byte[] GetFont(string faceName) 
    { 
     switch (faceName) 
     { 
      case "Arial#": 
       return FontHelper.Arial; 

      case "Arial#b": 
       return FontHelper.ArialBold; 

      case "Arial#i": 
       return FontHelper.ArialItalic; 

      case "Arial#bi": 
       return FontHelper.ArialBoldItalic; 
     } 

     return null; 
    } 


    internal static MyFontResolver OurGlobalFontResolver = null; 

    /// <summary> 
    /// Ensure the font resolver is only applied once (or an exception is thrown) 
    /// </summary> 
    internal static void Apply() 
    { 
     if (OurGlobalFontResolver == null || GlobalFontSettings.FontResolver == null) 
     { 
      if (OurGlobalFontResolver == null) 
       OurGlobalFontResolver = new MyFontResolver(); 

      GlobalFontSettings.FontResolver = OurGlobalFontResolver; 
     } 
    } 
} 


/// <summary> 
/// Helper class that reads font data from embedded resources. 
/// </summary> 
public static class FontHelper 
{ 
    public static byte[] Arial 
    { 
     get { return LoadFontData("MyProject.fonts.arial.arial.ttf"); } 
    } 

    public static byte[] ArialBold 
    { 
     get { return LoadFontData("MyProject.fonts.arial.arialbd.ttf"); } 
    } 

    public static byte[] ArialItalic 
    { 
     get { return LoadFontData("MyProject.fonts.arial.ariali.ttf"); } 
    } 

    public static byte[] ArialBoldItalic 
    { 
     get { return LoadFontData("MyProject.fonts.arial.arialbi.ttf"); } 
    } 

    /// <summary> 
    /// Returns the specified font from an embedded resource. 
    /// </summary> 
    static byte[] LoadFontData(string name) 
    { 
     var assembly = Assembly.GetExecutingAssembly(); 

     // Test code to find the names of embedded fonts 
     //var ourResources = assembly.GetManifestResourceNames(); 

     using (Stream stream = assembly.GetManifestResourceStream(name)) 
     { 
      if (stream == null) 
       throw new ArgumentException("No resource with name " + name); 

      int count = (int)stream.Length; 
      byte[] data = new byte[count]; 
      stream.Read(data, 0, count); 
      return data; 
     } 
    } 
} 

これは、これらの2に基づいて、単一の完全かつ労働者階級でありますほぼ同じ投稿:this blogthis forum

0

最新のPDFシャープ(現在は1.50ベータ3)を使用し、IFontResolverを実装します。

も参照してください:
https://stackoverflow.com/a/32489271/162529
https://stackoverflow.com/a/29059207/162529

フォントがサーバー上にインストールすることができるが、PDFsharpはそれを読み取ることができません。

+0

これらのリンクのコードを見ると、サーバーに存在する可能性があるにも関わらずフォントファイルをプロジェクトに添付する必要があるようです。 – noelicus

+0

PDFsharpはフォントファイルにアクセスできる必要があります。それがサーバー上の保護されたシステムフォルダにある場合は、まだ届いていません。 PDFharp 1.50ではバイト配列が必要なので、アセンブリとしてリソースとして、またはプロジェクトへのコンテンツファイルとして追加できます。 –

関連する問題