【CorelDRAW VBA】SVG一括書き出しの極意:Illustratorとの親和性を最大化する「最適化のレシピ」
こんにちは。CorelDRAWの自動化の深淵へようこそ。
マクロの記録ボタンを押して生成された、あの冗長で不安定なコードに別れを告げる時が来ました。CorelDRAW VBAを「単なる自動化ツール」から「デザインエンジニアリングの武器」へと昇華させるためには、オブジェクトのライフサイクルと、書き出し時の「構造」を理解することが不可欠です。
今回は、Web用ベクター資産の標準であるSVG形式への一括変換をテーマに、Illustratorとの互換性を最大化し、ファイルサイズを極限まで削ぎ落とす「職人の設定術」を伝授します。
—
1. なぜ「マクロの記録」では不十分なのか?
CorelDRAWの「マクロの記録」は、現在の状態をスナップショットとして切り取るだけで、最適化のパラメータまでは制御しきれません。
特にSVG出力において重要なのは、以下の3点です。
- テキストのパス化: フォント依存によるレイアウト崩れを防ぐ。
- メタデータの削除: CorelDRAW特有の冗長なXML情報を削ぎ落とし、Webでの読み込み速度を向上させる。
- 単位と精度の制御: Illustratorで開いた際に座標がズレないよう、小数点以下の精度を固定する。
これらをコードで記述することで、貴方のワークフローは「作業」から「自動生成」へと変わります。
—
2. SVG最適化を実装する:実用コード
以下のコードは、アクティブなドキュメントを特定のフォルダに「Web最適化設定」で書き出すためのプロトタイプです。
Sub ExportToOptimizedSVG()
‘ CorelDRAWのドキュメントとエクスポートフィルタの定義
Dim doc As Document
Dim exportFilter As ExportFilter
Dim options As StructExportOptions
Dim filePath As String
Set doc = ActiveDocument
filePath = “C:\Output\Design_Export.svg” ‘ 保存先パスを指定
‘ エクスポート設定の初期化
Set options = New StructExportOptions
options.AntiAliasingType = cdrNormalAntiAliasing
options.ImageType = cdrSVG ‘ SVG形式を指定
‘ 【重要】フィルタの取得
Set exportFilter = doc.ExportEx(filePath, cdrSVG, cdrCurrentPage, options)
‘ SVG設定のカスタマイズ
With exportFilter
.TextAsCurves = True ‘ テキストをアウトライン化(互換性確保の要)
.IncludeFileFormat = False ‘ 不要なメタデータを排除
.Precision = 3 ‘ 座標の精度(高すぎるとファイル肥大化)
.Encoding = cdrSVGUTF8 ‘ 文字化け防止のUTF-8
.Finish ‘ 書き出し実行
End With
MsgBox “最適化されたSVGの書き出しが完了しました。”
End Sub
—
3. コードの「魂」を解説する
このコードがなぜ優れているのか、エンジニアの視点で解説します。
① `ExportEx` メソッドの優位性
単なる `SaveAs` ではなく `ExportEx` を使う理由は、書き出しプロセスをオブジェクトとして保持できるからです。これにより、書き出し直前の微細なパラメータ(`Precision`や`TextAsCurves`など)を、手動操作に近い精度でコントロール可能になります。
② `TextAsCurves = True` の魔力
Illustrator環境でSVGを開いた際、「フォントがありません」という警告に悩まされたことはありませんか? `TextAsCurves` を `True` にすることで、フォント情報をベクターパスに変換します。これはWeb利用において「フォントの埋め込みコスト」をゼロにする、最も安全な選択です。
③ `Precision = 3` のバランス感覚
SVGの座標精度は高ければ良いというものではありません。精度を上げすぎると、パスの頂点データが膨大になり、ファイルサイズが肥大化します。Web用資産であれば `3` 程度が視覚的劣化もなく、最適です。
—
4. 陥りやすい罠と解決策
「ファイルが上書きされない!」という問題
VBAで一括変換を回す際、ループ処理の中で同じファイル名を使っていると、CorelDRAWがフリーズしたり、書き出しがスキップされたりすることがあります。
解決策: `DoEvents` をループの合間に入れ、OSに対して処理の優先権を適宜譲渡してください。
階層構造の崩れ
グループ化されたオブジェクトがSVG化された際にバラバラになる場合は、出力前に `doc.Selection.Group` を明示的に呼び出すか、書き出し対象のオブジェクトを個別に定義するロジックを組む必要があります。
—
最後に:エンジニアとしての一歩先へ
CorelDRAW VBAは、単なる事務作業の効率化ツールではありません。あなたのデザインを「プログラムを通じて拡張する」ための強力なエンジンです。
今回紹介したSVG出力の最適化は、数ある機能の氷山の一角に過ぎません。まずはこのコードをベースに、フォルダ内の全ファイルを一括変換するループ処理を組み込んでみてください。
「手作業で数時間かかっていた書き出しが、コーヒーを淹れている間に終わる」。
そんな体験こそが、エンジニアとしての最初の成功体験です。次はどのような自動化に挑みますか? 応援しています。
