あらすじ
「Microsoft Office で SVG ファイルを取り込んでパスを編集したい!」
「InkScape や Illustrator で編集したファイルや、FontAwesome のアイコンを、
PowerPoint や Excel でちょっと変更して使いたいんだ!」
ということを自動でやるために調べた内容をまとめました。
※この方法だとExcelに貼り付けできず、一度PowerPointを介する必要があります。
SVGとは
最近流行の SVG ファイル。みなさんご存じの軽量フォーマットです。
なぜ軽いかって、拡大縮小してもファイルサイズが一定だからです。
ベクター形式だから、ラスター形式と比較して、
「画面サイズ×複雑度」の数値が小さいほど軽くなります。
軽くしたい界隈に行くと、そこら中で出回っています。
ベクター⇔ラスター
問題
画像になってしまう
SVGファイルを直接PowerPoint内に貼り付けすると、
ベクター形式ではなく画像として貼り付けられます。
そのため、右クリックメニューから「パスの編集」などの
コマンドを使用して変形することはできません。
Officeのバージョンを上げれば大丈夫
Office 2016 以降のバージョンやOffice 365 などでは、
「アイコンの挿入」という機能があります。
これを利用すると、SVGファイルを取り込むことが出来ます。
またSVG 画像を Office 図形に変換する機能も標準で備わっています。
ところがどっこい
いまだにOffice 2013や2010、はたまた、2007を利用している企業もあったりします。
Office にはサポート期限がありますので、
セキュリティ対策の視点では買い替えをお勧めします。
しかし、そんなところでは、予算を通すのも大変なので、
とりあえずOSSとかWindows標準機能で何とかしたいという状況も存在します。
Officeが最新だとしても
他にも、「新しい機能を覚えるとか面倒だからコピペさせて」
といった無茶な要望を受けることもあるかもしれません。
さて、どう対処しましょう。
何をするの
大すじ
大きく以下の3つの流れでOKです。
- svg→emf
- Officeに貼り付け
- グループ解除
変換
まず、Office図形として編集が可能な状態で貼り付けするには、
あらかじめ「拡張メタファイル」という形式に変換する必要があります。
例えば「peacemark.svg」があったら「peacemark.emf」にします。
貼付
次に、このEMF形式になったファイルをOfficeにコピー&ペーストまたは、ドラッグ&ドロップします。
グループ
貼り付けしたら、Office上でその図形を右クリックしてグループ解除します。
微修正
あとは細かい修正です。
グループ解除した時に「ページ枠みたいなもの」を消したり、
なぜか無駄に付いた「図形の輪郭」を消したりします。
以上です。簡単ですね。
肝心の変換処理
Inkscapeでやろう
Inkscapeを変換に使います。
Inkscapeは有名なOSSですので、利用するのに抵抗のある人は少ないでしょう。
括りとしては、「Gimp・Inkscape・Blender・FreeCAD・LibreOffice」というグループに属すると思います。
Inkscapeのインストール作業の説明は省きます。
変換開始
さあ、変換しましょう。
Inkscapeで開いて、EMF形式で名前を付けて保存することもできます。
しかし、これはエンジニアとしてあるまじき行為。
コマンドライン
なぜなら、Inkscapeにはコマンドラインオプションがあるからです。
エンジニアと名乗るからには、退屈なことはスクリプトに、やらせたいものです。
変換用スクリプト
バッチファイルを作ろう
変換するためのスクリプトファイルをCMD形式で作成します。
メモ帳でもvscodeでも何でもよいですが、
以下のプログラムを書いて「SvgToEmf.cmd」のような、CMD形式で保存します。
@echo off
set inkscape1="%ProgramFiles%\Inkscape\bin\inkscape.com"
%inkscape1% --export-filename=%~n1.emf %1
出来たスクリプトの使い方
こうして出来上がったCMDファイルにSVGファイルをドラッグ&ドロップすると、同じフォルダにEMFファイルが出現します。
コマンドラインの場合、コマンドプロンプトなどで、SvgToEmf.cmd
が置かれたフォルダに移動します。そして、SvgToEmf.cmd 変換したいファイル.svg
と入力すると、SvgToEmf.emf
が作成されます。
スクリプトの中身の説明
-
%1
は、SvgToEmf.cmd
に渡された最初の引数を指します。- これは、変換したい元のファイル(例えば、SVGファイル)のパスです。
-
%~n1
は、%1
で指定されたパスから拡張子を除いたファイル名を取得しています。- 例えば、
%1
がC:\path\to\file.svg
だった場合、%~n1
はfile
になります。
- 例えば、
EMF以外もできる
--export-filename
というオプションを使うと、自動でファイル形式を認識して変換してくれます。
たとえば、この%~n1.emf
という部分のemf
を変えて%~n1.ps
とするとPhotoshopの形式に変換できたりします。
「svg、png、ps、eps、pdf、emf、wmf、xaml」とかを使えるみたいです。
詳しくは、公式リファレンスを読んでください。
発展
正式リリースでInkscapeは大きく変化したらしい
実行ファイルの拡張子
上記で作成したスクリプトの中に、inkscape.com
という部分があります。
Inkscapeの正式リリースバージョン1.0.0
から、EXEではなくCOMに変更されたらしいです。
GUIのダークモード標準対応
今までダークモードはなかったですが、ダークモードが使えるようになりました。
本稿とは全く関係ないですね。
Powershellで書いた場合
Powershellで書くと、以下のような感じになります。
$Inkscape="$env:ProgramFiles\inkscape\bin\inkscape.com"
$SourceFileName="source.svg"
$ExportFileName="export.emf"
Start-Process -FilePath $Inkscape -ArgumentList $($SourceFileName,'--export-filename="$ExportFileName"')
※ドラッグ&ドロップはできません。セキュリティーポリシー関連とかコーディングが面倒です。
環境
Inkscape 1.0
Windows 10
PowerShell 7
一次情報
それではみなさん、
素敵なSVGライフをお楽しみください!
最後まで目を通してくださり、ありがとうございます!
Excelsior!