1

ディスクから Postscript フォントをロードする必要があるプロジェクトがあります。「AddFontFile」を使用できることがわかりました。いくつかの調査を行うと、2つのフォントhttp://msdn.microsoft.com/en-us/library/system.drawing.text.privatefontcollection.addfontfile.aspxを一緒にパイプする必要があることがわかりました。

fontCollection = new PrivateFontCollection();
fontCollection.AddFontFile(@"C:\Temp\Font\myfont.PFM|C:\Temp\Font\myfont.PFB");

「パスに不正な文字があります」というエラーが表示されます。2 つのフォントを正しくパイプ処理しているかどうかはわかりません。

どんな助けでも素晴らしいでしょう、私たちはまだXPを使っているので、それが違いを生むかどうかはわかりません.

マイク

4

2 に答える 2

0

いくつかの検索の後、私はそれを機能させました。これをどのように解決したかを共有したいと思います: AddFontFile は間違った API でした代わりに AddFontResource を使用する必要がありました

            String fontPath = @"C:\Temp\Font2\GXSTRA03.PFM|C:\Temp\Font2\GXSTRA03.PFB";
            int result = AddFontResource(fontPath);
            long msg = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);

フォント リソースを削除するには

RemoveFontResource(@"C:\Temp\Font2\GXSTRA03.PFM|C:\Temp\Font2\GXSTRA03.PFB");
long msg = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);

誰かが外部 WinApi 呼び出しを行うことに慣れていない場合、ここに私が使用したインポートおよびインポート DLL コードがあります

using System.Runtime.InteropServices;

private static uint WM_FONTCHANGE = 0x1D;

        Import("gdi32.dll")]
        static extern int AddFontResource(string lpFilename);

        [DllImport("gdi32.dll")]
        static extern bool RemoveFontResource(string lpFileName);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

このフォントは、単語やメモ帳などに表示されるようになりました..

于 2013-10-18T15:10:42.400 に答える
0

|ファイル名にパイプ文字を含めることはできません。PrivateFontCollection.AddFontFileには有効なファイルパスが必要です。したがって、「パスに不正な文字」の例外があります。MSDN での入力はA String that contains the file name of the font to add. 、一度に 1 つのファイルを渡してみてください - このパイピングのアイデアについてはわかりません..

Postscript の要望については、Remarks セクションに、OpenTypesのサポートは限定的であると記載されています。

于 2013-09-24T17:11:26.440 に答える