問題タブ [privatefontcollection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - mono3.2.3 c# で PrivateFontCollection.Dispose() を使用するとアプリケーションがクラッシュするのはなぜですか?
HTML を PDF に変換できるライブラリをC#で作成しています。明らかに、それはクロスプラットフォームであり、なぜモノを使っているのかという考えです。これを行うには、Seller フォントをクラスでロードする必要があります。System.Drawing.Text.PrivateFontCollection
アプリケーションがすべてのコードの実行を終了すると、アプリケーションが予期せず終了します。多くのテストの後、問題はDispose メソッドが呼び出されSystem.Drawing.Text.PrivateFontCollection
たとき、またはDispose()
ofSystem.Drawing.FontFamily
が呼び出されたときであることがわかりました。
この問題はWindows (私は Windows 7 32 ビットを使用しています) にあり、Linux では問題ありません。
これはテストコードです
c++ - Gdiplus::PrivateFontCollection.AddMemoryFont 呼び出し時のアクセス違反エラー
このウォークスルーに従って、C++ にインストールせずにフォントを使用する方法を示します: http://www.codeproject.com/Articles/42041/How-to-Use-a-Font-Without-Installing-it ntdll.dll のアドレス違反エラー (0xc0000005)
DialogEx::OnInitDialog() 継承関数の呼び出しコードは次のとおりです。
呼び出しをデバッグしましたが、すべて問題ないようです。長さが一致し、NullPointers はありません...
例外は、呼び出されたメソッドのどこかで発生しますgdiplusfontcollection.h
これ以上デバッグできませんでした...
関数呼び出しで何が問題になっているのかを調べる方法はありますか?
.net - PrivateFontCollection.AddMemoryFont が Windows Server 2012 R2 でランダム エラーを生成する
PrivateFontCollection.AddMemoryFont を使用してフォントをメモリに読み込み、これらを使用して画像を生成する .NET 3.5 アプリケーションがあります。最近これを Windows Server 2012 R2 にインストールしましたが、断続的なエラーが発生しています。
この問題は、次の方法で示されます。
Windows 7 では、これは一貫して機能します。Windows Server 2012 R2 では、複数のフォントを使用して繰り返し呼び出すと失敗します。例えば:
何百回も呼び出されても動作しますが、複数のフォントで呼び出します:
最初の数回の呼び出し (20 回程度) では機能しますが、ランダムな結果が生成され始めます (2 回目の呼び出しでは、テキストが翼状に表示された画像が返されることがあります。つまり、フォントが混同されています)。
DrawString呼び出しで「GDI +で一般的なエラーが発生しました」というメッセージが時々(まれに)表示されます。
Windows 7 では、これらのエラーは発生しません。
クリーンアップするためにさまざまなオプションを試しましたが、成功しませんでした。
回避策として、フォント ファイルをディスクに書き込んで AddFontFile でロードしようとしましたが、(Windows 2012 R2 では) フォント ファイルはプロセスの存続期間中ロックされるため、削除できません。これにより、このオプションは受け入れられなくなります。
AddMemoryFont を一貫して動作させるか、AddFontFile を取得してファイルのロックを解除するための助けをいただければ幸いです。
c# - カスタム フォントの異なる太さを使用しますか?
asp.net アプリケーションがあり、カスタム フォントを使用していますが、フォントの太字バージョンと軽量バージョンの両方を使用する必要があります。どちらも同じフォントファミリーです。私は次のようにそれらを追加しています:
2 つのフォント ファイルを追加していますが、pfc の Families 配列には項目が 1 つしかないため、FontStyle を指定してもすべて太字で印刷されます。追加した両方のファイルを使用するにはどうすればよいですか? また、一部を太く、一部を明るくするにはどうすればよいですか?
c# - PrivateFontCollection.AddFontFile のファイルを削除するには?
短時間で使用できるフォントを多数作成しています。フォントはドキュメントに埋め込まれます。もう使用しない場合は、フォントファイルを削除したい。どうすればこれを行うことができますか?次の単純化されたコードは機能しません。
ファイルがロックされているため、ファイルの削除に失敗しています。ファイルロックを解除するために他に何ができますか?
PS: AddMemoryFont を使用する前に。これは Windows 7 で機能します。ただし、Windows 8 .NET では、最初の FontFamily が破棄された後に間違ったフォント ファイルを使用します。すべての Document には他のフォントを含めることができるため、膨大な数のフォントが必要であり、すべてへの参照を保持することはできません。
.net - gdi+ を使用した PrivateFontCollection は、Windows 8 以降で間違った FontStyle を使用することがあります。
PrivateFontCollection から作成したフォントがあり、GDI+ を使用して文字列を描画しようとすると、間違った FontStyle が使用されることがあります。
これは、メモリから PrivateFontCollection に読み込まれたフォントと、ファイルから PrivateFontCollection に読み込まれたフォントの両方で観察されました。
次の例では、ファイルからフォントをロードしています。私はそれらをすべてFontsというフォルダに入れています。以下のようにロードするとします。
次に、次のコードを使用して文字列 OnPaint を描画しようとします
次に、ほとんどの場合、文字列は FontStyle.Regular に対応するフォントで描画されます。最初に通常のフォントをロードするように注意すると、FontFamily が FontStyle.Regular 以外の FontStyle をファッジすることに気付きました。それらを PrivateFontCollection にロードしたかどうかに関係なく。
この動作を確認したフォントの一部を次に示します。
- 幽ゴシック
- カリフォルニアFB
- トゥセン MT
- ギル サンズ MT
- ベルリン サンズ FB
- ブロワリアUPC
- 繁体字アラビア語
GraphicsPath で Graphics.DrawString() および AddString を実行すると、この動作が見られます。TextRenderer.DrawText() を使用すると、フォントが正しく描画されます。
PrivateFontCollection https://msdn.microsoft.com/en-us/library/windows/desktop/ms533820(v=vs.85) のサンプル コードを使用するだけで、Windows 8 または 10 でこの動作を簡単に再現できるはずです。 aspx
この動作に関する Microsoft とのやり取りから、彼らはこれが gdi+ の問題であると考えています。
c# - C#フォントの名前がわかっているときにフォントファミリーを取得する
私はPrivateFont
このように宣言しています
次に、インデックスでフォント情報を取得します。
今、フォント名でフォントファミリーを取得したい。どのようにできるのか?
c# - リソースから PrivateFontCollection にフォントをロードすると破損する
リソースから PrivateFontCollection にフォントをロードする際に問題があります。
これを開始したとき、ファイルからフォントを読み込むことに成功しましたが、プロジェクトにフォントを埋め込みたいと思います (そのため、ユーザー側のファイルの混乱が少なくなり、アプリケーションの実行中の IO が少し少なくなります)。
次のコードは、フォントをロードし、適切な名前を取得し、スケーリングを可能にしますが、どの文字も適切に表示されません。
使用例:
埋め込みリソースとファイル ベースのテストの両方で、現在の FontAwesome TTF ファイルを使用しています。埋め込み時、または埋め込みからの読み込み時に、翻訳で何かが失われたり、スクランブルされたりしているようです。フォントを埋め込みリソースから PrivateFontCollection にロードできるように、これを機能させるには助けが必要です。
SO で調べた「解決策」がいくつかありますが、それらはかなり古く、一部またはすべてのコマンド/アクセサーは Visual Studio 2013 では使用できなくなりました (記事の解決策は 4 ~ 5 年前のものです)。「解決策」の例と、それらが機能しない理由:
解決策 #1 - フォントのアクセサー文字列が null を返すため、これは機能しません。私の場合、アクセサはMyProject.Properties.Resources.fontawesome_webfont
解決策 2 - この解決策が最も近かったのですが、リソースへのアクセスに使用されていた方法が機能しなくなりました。上記の私のコードは、byte[] 配列をメモリに渡し、メモリからロードするというコアコンセプトを取り出して、これの収穫されたバージョンを実装しています。私の場合、リソースの get{} プロパティはすでに byte[] 配列を返すため、それをバイト配列に「変換」する必要はなく、コードのその部分を安全に削除することができました。新しいアクセサーを使用するように更新します。
どちらの場合も、フォント ファイルを埋め込みリソースから PrivateFontCollection にロードできるようにする、この問題の解決策が必要です。