拡張メタファイルの線幅編集

AutoCadで作成したデータをWordやExcelに貼ろうとすると、線幅が論理幅1となり非常に細く印刷されてしまい困っていました。「AutoCAD図面をエクセルに貼り付けると印刷したとき線が薄い」で主に検索されているようです。AutoCadからWordとExcelにどうやったら綺麗に貼り付けできるかネットで調べたところ、あまりまともな対策がないようです…。「背景を白にして線を黒にしてキャプチャして貼り付け」がどうやら一番ましみたいですね。だが違うんだ!私はベクターファイルをWordに張り付けてきれいに印刷されたものを使いたいんだ!と何となく挑戦したくなりましたので、とりあえず検討してみました。

まずAutoCadから出力できるベクターファイルはepsかwmfの二通り。epsとかイラレ持ってないしとりあえずあきらめる。イラレ持ってる人は編集できるならそれでいいかも(できるか知らないが)。wmfはフォーマットが糞古くてwmfの仕様書が難解すぎて無理臭い。そもそもMSももうwmf使うなって言ってるらしいし…。じゃあ一個ソフト挟むけど、AutoCAD→ドロー系ソフト(DynamicDrawとか)にコピペ→拡張メタファイル(emf)で出力→線幅変更(これは自分で作る)→wordに貼り付け、という手順を目指すことにした。

それじゃあまずemfのファイル仕様調べよっかということで、MSの仕様書を見て軽くお勉強。ファイル構造は単純にレコード(描画命令みたいなもの)の連続構造なのでプログラム作成が簡単そうなのがわかります。(まぁ実際はプログラムが作成できそうなのでemfを介して線幅変更に挑んだわけですが。)一つ一つのレコード構造が違うけどそれは仕方ない。必要なレコードだけ仕様書読めばOK。

線幅を指定しているレコード臭いのが「EMR_EXTCREATEPEN Record」「EMR_CREATEPEN Record」「CREATEFONT Record」の3つ(それ以外も少しありそうだがとりあえず無視)。ここまでわかれば、それぞれの書き換え場所を仕様書読んで調べて、実際書き換えるemfファイルのレコード構造を読み取っちゃえば終了です。バイナリで読み込んで、自分で設定した数値に置換し、置換後の拡張メタファイル(emf)を出力するプログラムを作成しました。本来はwindowsAPIを使用したら簡単に済むんだろうなぁ・・・。使ったことがないからわからないので全部C言語で書きました。

とりあえずプログラム置いときます→EMFCH.zip
使い方はreadmeを見てください。

プログラムでは拡張メタファイル(emf)に使用されているレコードの種類が出力されるようになっていますので、上記の仕様書と照らし合わせれば、どんな命令が入っているかなんとなくわかります。とりあえず自分が使いたい図の線幅変更は成功しました。上記の3つ以外のレコードで線幅指定してたら、うまくいかないかもしれません。あと上記の線幅指定レコード数が多すぎると編集無理です(それぞれ100個までは対応可)。

wmf版も勢いで作ろうとしましたが、構造がやっかいすぎて挫折しました。レコードの連続じゃあなさそう?どういう構造なんだあれ

ちなみにAutoCADの製作者AUTODESK様は他ソフトに貼り付ける場合は、CAD上で全部ポリラインにして線幅指定してごり押ししろとのこと。文字はその方法だとうまくいかないんですよね。文字のポリライン化は「express tools」が必要でしかも動作対象外だし。会社のPCで動作対象外ツールを入れるほど勇気はない。他のCADだとうまくいくらしいのでさっさと修正してほしいですね。
他のアプリケーション(例:Microsoft Excel)に図形を貼り付けたとき、図形がかすれて表示されることがある

記事を書いた日2017年9月

文責 ellery459

トップページへ inserted by FC2 system