はじめに
draw.ioで作成した図の全ページを一括で画像ファイルに変換する方法をまとめました。
実行環境
- Windows 10 Pro
- バージョン1709
- drawio-desktop
- v 14.4.3
- Python
- 3.9.2 64bit
実装
ディレクトリ構成
imageフォルダ内にある.drawio
ファイルから.svg
を作成します。
出力されるファイル名は{file_name}-{page_name}.svg
になります
./
│ make.py
│
└─image
sample1.drawio # 入力
sample1-page1.svg # 出力
sample1-page2.svg # 出力
sample1-page3.svg # 出力
sample2.drawio # 入力
sample2-page 1.svg # 出力
sample2-page 2.svg # 出力
コード
make.py
from pathlib import Path
import xml.etree.ElementTree as et
import subprocess
def get_output_path(file_path, page_name, file_type):
stem = '-'.join([str(file_path.stem), page_name])
suffix = '.' + file_type
return file_path.with_name(stem).with_suffix(suffix)
def generate_image(file_path):
DRAWIO = '"C:\Program Files\draw.io\draw.io.exe"'
FILE_TYPE = 'svg'
root = et.parse(file_path).getroot()
for i in range(int(root.get('pages'))):
page_name = root[i].get('name')
# option
f = ' '.join(['-f', FILE_TYPE])
p = ' '.join(['-p', str(i)])
o = ' '.join(['-o', '"' + str(get_output_path(file_path, page_name, FILE_TYPE)) + '"'])
# run
command = ' '.join([DRAWIO, '"' + str(file_path) + '"', '-x', f, p, o])
subprocess.run(command)
if __name__ == '__main__':
root_dir = Path.cwd()
for i in root_dir.glob('image\\*.drawio'):
generate_image(i.relative_to(root_dir))
解説
.drawio
の読み出し
以下のように.drawio
ファイル内にはページ数pages
と各ページの名前name
の情報があります。
これをxml.etree.ElementTree
で読み出してファイル名を生成しています。
sample1.drawio
<mxfile modified="..." ... pages="3">
<diagram name="page1" id="...">
...
</diagram>
<diagram name="page2" id="...">
...
</diagram>
<diagram name="page3" id="...">
...
</diagram>
</mxfile>
python上ではファイル毎にpages
の数だけ生成処理を行います。
root = et.parse(file_path).getroot()
for i in range(int(root.get('pages'))):
page_name = root[i].get('name') # ページ名を取得
.drawio
ファイルの各ページの生成方法
drawioをコマンドライン実行する方法はdraw.io をコマンドラインで実行して、画像ファイルをエクスポートするが参考になります。
-p, --page-index <pageIndex>
で指定したページを変換することができます。
-a, --all-pages
はpdf生成のみ対応しているため、画像生成時は使用できないので注意しましょう。
例えば1ページ目を生成する時は以下のようになります。
コマンド
"C:\Program Files\draw.io\draw.io.exe" "image/sample1.drawio" -x -f svg -p 0 -o "image/sample1-page1.svg"
その他
ファイル名やページ名に空白が含まれる可能性があるため、ファイル名は""
で囲うようにしています。
'"' + str(file_path) + '"' # ""で囲う
""
をつけない場合、以下の例ではsample2-page 1.svg
ではなくsample2-page
というファイルが生成されてしまいます。
コマンド
"C:\Program Files\draw.io\draw.io.exe" image/sample2.drawio -x -f svg -p 0 -o image/sample2-page 1.svg
参考
drawio-cli
draw.io をコマンドラインで実行して、画像ファイルをエクスポートする
draw.ioの全てのタブを一括で画像出力する