SVGからEMFへの変換について

b3g2018-04-26
 CADによるHP-GLデータをEPSにしてWordやExcelに読み込んでいたところ、昨年4月のMicrosoftのセキュリティ対策によりそのままでは図の挿入が不可となってレジストリの設定が必要。また将来の対応は期待できない状況です。そこでEPSをやめてWMFかEMFファイルへの運用をするべく、EPSからEMFへの変換としてpstoeditを試したのですがEMFへの変換が完全でないのでpstoeditの利用はあきらめました。
 他に方法はと検討して、CADのHP-GLファイルをEPSに変換するのに使っていたhp2xxSVGへの出力ができることに注目しました。ただしMicorsoftのOfficeは365ではSVGの読み込みが可能なようですが、会社で主に使っている2010や2016ではEPSと同じようには扱えないようです。そこでSVGからWMF、EMFへの変換プログラムを探すとINKSCAPEが使えるとのこと。元はAdobeIllustratorなどと同じ描画ソフトですが、コマンドでの変換もできるので目的にはぴったりです。
 早速バージョン0.92.3をダウンロードしてこちらのページを参考にコマンドプロンプトで以下のように変換を実行してみました。

C:\temp>"C:\Program Files\Inkscape\inkscape.com" -z -f test.svg -M test.emf

 Windows版のコマンドはinkscape.exeではなくinkscape.comを呼び出すのが正解です。で結果はちゃんとEMFファイルが作成されました。線の太さもばっちりです。ただAdobeIllustratorでは問題なく見られるのですが、Wordに挿入してみるとデータの下半分が見えません。図の編集でいったんOfficeの図形式にすれば全体が見えるようになるのですがこれはめんどう。INKSCAPEを起動して対象のSVGファイルを開いて見るとINKSCAPEのページ枠に対してデータの中央から下がページの下端からはみ出たレイアウトになっています。hp2xxで作成したSVGの仕様かINKSCAPEのせいかはわかりませんが、このままでは変換は未完成です。
 INKSCAPEにおけるSVGデータのページのフィッティングについて調べるとこちらのページを見つけました。要は--export-area-drawingオプションを使っていったん別のSVGに書き出してみよ。とのことです。マニュアルにも

SVGPNG、PDF、PS、および EPS エクスポートにおいて、エクスポートされる領域はページではなく、その描画部分、すなわち、ドキュメント内のすべてのオブジェクト (--export-id を使用した場合はエクスポートされるオブジェクト) 全体の境界枠となります。

とあるのでSVG出力に使えそう、そこで--export-area-drawingと同じ意味の-Dオプションを付けて

C:\temp>"C:\Program Files\Inkscape\inkscape.com" -z -D -f test.svg -l tmp.svg
C:\temp>"C:\Program Files\Inkscape\inkscape.com" -z -f tmp.svg -M test.emf

と2段階の実行でできたEMFファイルは目的とするデータが中央に配置されたEMFファイルとなりました。
 これでほぼ目的とするコマンドラインでのHP-GLからEMFの変換ができるようになったのですが、1つだけ問題が残っています。それは作成されたEMFファイルが元のHP-GLや前に使っていたEPSのデータと比べて小さいということ。およそ75%の大きさで貼り付けられます。おそらくINKSCAPEのデフォルト解像度が96dpiというのとWindows側が72dpiの差異の影響と推測します。まあEMFやSVGのデータじたいがベクタ形式なので拡大縮小に強く、そこは運用上適時スケール変更でなんとかしようと思います。

追記

 新しいバージョン1.0での変換はこちらのページにまとめました。