Design Automation API は、WorkItem 実行時に実行環境となる仮想マシン(AMI)を確立して、コアエンジンを実行し、WorkItem 終了時にシャットダウンするクラウド コンピューティング環境です。この際、仮想マシンに使用するのは英語版の Windows OS で、Supplyental Fonts をインストールしているものの、Design Automation API for AutoCAD 利用の注意点 でご案内しているとおり、既定で使用可能な日本語 TrueType フォントは、MS ゴシック、MS P ゴシック、MS UI ゴシック MS 明朝、MS P 明朝、游 明朝、メイリオ、メイリオ UI のみです。
Design Automation API for AutoCAD の WorkItem 処理で、素材として扱う図面に上記以外の TrueType フォントが使用されていたら、何が起こるか見てみましょう。
例えば、図面ファイルのレイアウトに見積書にカスタムな TrueType フォント(.ttf)を利用したとします。この場合、その TrueType フォントを AppBundle に同梱してコアエンジン環境に渡すと、WorkItem 実行時に AppBundle 内の TrueType フォント ファイルを識別して、実行環境に展開するようになっています。
AppBundle 同梱の TrueType フォントの展開は、WorkItem 実行時に生成されるログファイル上にも表れます。
:
[10/12/2021 07:24:36] Install user TrueType font
"T:\Aces\Applications\73111aa8b77b232596bcdcdbbf316774.AjFukUWeRk05eA9XpH8Nnh6
2BzPD60mg.TableFanConfigurator[1].package\CreateQuotation.bundle\Contents\851MkPOP_100.ttf".
[10/12/2021 07:24:36] Version Number: S.51.Z.45 (UNICODE)
[10/12/2021 07:24:36] LogFilePath has been set to the working folder.
[10/12/2021 07:24:36] Loading Modeler DLLs.
:
にもかかわらず、コアエンジンにロードされたアドインで生成された PDF ファイルを見ると、素材の DWG 図面にあるフォントが置き換わってしまう現象が起こっていることがわかります。
- 参考フォント出典:https://fontfree.me/ 851マカポップ Ver 0.01 フォントを利用
この状態は、コアエンジンが TrueType フォント(.ttf)を正しく認識できず、システム変数 FONTALT に設定されている代替フォントが使用されていることを意味します。この場合、フォント名(851マカポップ)とフォントファイル名(851MkPOP_100.ttf)が一致していないため、コアエンジンが正しく TrueType フォントを認識することが出来ていません。
これを解決するのは、フォント マッピング ファイル(.fmp)を利用して解決することが出来ます。
- 代替フォントについての オンライン ヘルプ には、フォント マッピング ファイルの記述方法について次のように説明されています。
「フォント マッピング ファイルの各行には、フォント ファイルの名前(ファイル拡張子やパスを含まない)と代替フォント ファイル名をセミコロン(;)で区切って指定します。代替フォント ファイル名には、.ttf のようなファイル拡張子を付けます。」
この説明に沿って、今回のフォントのマッピングを設定しようとすると、次のようになります。
851マカポップ;851MkPOP_100.ttf
ただし、このフォント マッピング ファイルでは、AutoCAD のフォント処理コードがファイル名 851MkPOP_100.ttf の検証に失敗してしまうため、このフォントファイル名を simplex.shx にマッピングされてしまい、期待した結果が得られません。
Design Automation API プロセスの間にある AppBundle 内の TrueType フォントを一時的にインストールします。通常、フォント マッピング ファイルの処理では、システム レジストリを調べますが、システム レジストリには、一時的に登録されたフォントのエントリが含まれていません。
今回のように、WorkItem 実行時に一時的に登録されるフォントを解決させるには、フォント名とフォントファイル名(除く拡張子 .ttf)を使用する必要があります。この問題は、Design Automation API for AutoCAD(AcCoreConsole.exe)上の一時的なフォント登録のサポートに特有のものです。
下記は、851マカポップ をローカル コンピュータの Windows にインストールした際に得られるフォント ファイル名です(フォント設定で当該フォントの情報を表示させた画面)
ここで有効なフォント マッピング ファイルの記述は、次のとおりです。
851マカポップ;851MkPOP
なお、フォント マッピング ファイル自体は、UTF-8 エンコードで保存する必要があります。
フォント マッピング ファイルの利用を有効にするには、Activity で指定するコアエンジンへの CommandLine に /dwgfontmap を挿入する必要があります。
"commandLine": ['$(engine.path)\\accoreconsole.exe /i "$(args[DWGInput].path)" /dwgfontmap /al "$(appbundles[TableFanConfigurator].path)" /s $(settings[script].path)'],
次に、Activity と WorkItem 登録時に、それぞれフォント マッピング ファイルが作業領域に展開されるように指定すると、正しく TrueType フォントが認識されるようになります。
フォント マッピング ファイルの展開は、WorkItem のログ出力でも確認することが出来るはずです。
:
[10/12/2021 08:40:22] Install user TrueType font "T:\Aces\Applications\73111aa8b77b232596bcdcdbbf316774.AjFukUWeRk05eA9XpH8Nnh6
2BzPD60mg.TableFanConfigurator[1].package\CreateQuotation.bundle\Contents\851MkPOP_100.ttf".
[10/12/2021 08:40:22] Version Number: S.51.Z.45 (UNICODE)
[10/12/2021 08:40:22] LogFilePath has been set to the working folder.
[10/12/2021 08:40:22] Loaded drawing font-mapping file: T:\Aces\Jobs\f61c5aa49b7b477896b2b2b039911a44\dwg.fmp
[10/12/2021 08:40:22] Loading Modeler DLLs.
:
この環境で処理された WorkItem 処理では、TrueType フォントが正しく認識されて、成果ファイルである PDF ファイルに反映されるようになります。
- カスタム フォント ファイルの利用に際しては、念のため、フォント ファイルのライセンス(使用許諾)をご確認いただくことをお薦めします。
By Toshiaki Isezaki
コメント