従来のASP.NETのアプリケーションをAzureに移植しようとしていますが、フォントの問題が発生しています。特定の非標準フォントで描画されたテキストでイメージをレンダリングするコンポーネントがあります(フォント "Water"を呼び出すことができます)。.NET PrivateFontCollection - 異なるスタイルのフォントを読み込みます
水は、それぞれ異なるスタイルを表すいくつかの異なるTTFファイルとして存在します。 「Water Black」、「Water Light」、「Water Regular」、「Water Ultralight」などのスタイルをカバーする合計12種類のTTFファイルがあります。
ASP.NETでは、フォントをWindowsディレクトリにインストールしてからコードを呼び出してインストールします。
Font _fontMedium = new Font("Water Medium", iFontMedium, FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
ただし、Azureでは独自のフォントをインストールすることはできません。したがって、これらのフォントをイメージ上に描画するには、アプリケーションでコンテンツとしてフォントファイルをアップロードし、PrivateFontCollectionクラスを使用して個別にロードする必要があります。
私の現在のコードはこれです:「水」:
PrivateFontCollection fontcollection = new PrivateFontCollection();
string fontpath = string.Concat(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "assets\\");
fontcollection.AddFontFile(string.Concat(fontpath,"water-bold-webfont.ttf"));
fontcollection.AddFontFile(string.Concat(fontpath, "water-ultralight-webfont.ttf"));
fontcollection.AddFontFile(string.Concat(fontpath, "water-medium-webfont.ttf"));
FontFamily[] privatefontfamilies = fontcollection.Families;
Font _fontMedium = new Font("Water Medium", iFontMedium, FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
Font _fontSmall = new Font("Water UltraLight", iFontSmall, System.Drawing.GraphicsUnit.Pixel);
Font _fontMini = new Font("Water Bold", iFontMini, System.Drawing.GraphicsUnit.Pixel);
私が持っている問題は、フォントファイルが追加された後に解除した後、fontcollection.Familiesコレクションで唯一の家族であるということです。
同様に、フォントオブジェクトが宣言された後、ファミリのデフォルトはMicrosoft Sans-Serifになります。私が代わりに使用する場合:
"Water"ファミリでフォントが読み込まれますが、スタイルを適切に選択できないようです。フォントスタイルのための私の唯一のオプションは、ロードしようとしているフォントスタイルすべてを網羅していないFontStyle enumで定義されたものです。
要するに、特定のフォントと利用可能なすべてのスタイルが個別のTTFファイルにロードされている場合、それらをPrivateFontCollectionにロードして個別に使用する方法はありますか?
あなたはかなり固執しています。 FontStyleは、大胆さのさまざまなバリエーションの中から選択するのに十分な洗練されたものではありません。また、GDI +は、compatファミリ名を生成するほど洗練されていません。あなたはこの仕事をすることはできません。 –
1.3 SDK(管理者権限とスタートアップタスク)を追加することで、ロールにフォントをインストールできるようになりました。 –
私はそれがハックだと知っていますが、ttfファイルごとにPrivateFontCollectionのインスタンスを作成できます。適切なものを選択する必要がありますが、少なくともそれは回避策です。 –