仕事でもプライベートでもよく使っているDrawio(現diagrams。以降ややこしいのでdrawioと記載します。)。
前々から複数のシートを一括で画像に変換できないかなと思っていて調べていて、ようやくやり方を見つけることが出来たので記事にしておきます。
ちなみにプラットフォームとしてはLinuxです。
LinuxはCUIで使っている状態で、GUIはない状態、WebUIやVSCodeでdrawioを使用して、そのファイルにあるシートを一括でエクスポートするようなユースケースです。
drawioをダウンロード
まずはdrawioを以下のサイトからダウンロードします。Linuxなので、debをダウンロードしてきます。
dpkgでインストールする際にxdg-utilsが必要ということで一緒に入れておきます。
sudo apt install xdg-utils sudo dpkg -i drawio-amd64-21.6.5.deb
これでインストールは完了。
コマンドとしてdrawioというのが使えるようになります。
% which drawio /usr/bin/drawio % drawio --help Checking for beta autoupdate feature for deb/rpm distributions Found package-type: deb Usage: drawio [options] [input file/folder] Options: -V, --version output the version number -c, --create creates a new empty file if no file is passed -k, --check does not overwrite existing files -x, --export export the input file/folder based on the given options -r, --recursive for a folder input, recursively convert all files in sub-folders also -o, --output <output file/folder> specify the output file/folder. If omitted, the input file name is used for output with the specified format as extension -f, --format <format> if output file name extension is specified, this option is ignored (file type is determined from output extension, possible export formats are pdf, png, jpg, svg, vsdx, and xml) (default: "pdf") -q, --quality <quality> output image quality for JPEG (default: 90) -t, --transparent set transparent background for PNG -e, --embed-diagram includes a copy of the diagram (for PNG, SVG and PDF formats only) --embed-svg-images Embed Images in SVG file (for SVG format only) -b, --border <border> sets the border width around the diagram (default: 0) -s, --scale <scale> scales the diagram size --width <width> fits the generated image/pdf into the specified width, preserves aspect ratio. --height <height> fits the generated image/pdf into the specified height, preserves aspect ratio. --crop crops PDF to diagram size -a, --all-pages export all pages (for PDF format only) -p, --page-index <pageIndex> selects a specific page, if not specified and the format is an image, the first page is selected -l, --layers <comma separated layer indexes> selects which layers to export (applies to all pages), if not specified, all layers are selected -g, --page-range <from>..<to> selects a page range (for PDF format only) -u, --uncompressed Uncompressed XML output (for XML format only) -z, --zoom <zoom> scales the application interface --enable-plugins Enable Plugins -h, --help display help for command vagrant@ubuntu2204 20230727 %
仮想ディスプレイを作る(Linuxのみ)
drawioで何か処理をしようとしてcliを叩くと、drawioとしてはGUIを立ち上げようとします。なので、GUIが基本必要になります。
前述した通り、動作させようとしているLinuxにはグラフィックの機能は入れていないので、X Window Systemの仮想ディスプレイが作れるXvfbをインストールします。
sudo apt update sudo apt install xvfb
そして、仮想ディスプレイを起動させます。99は正直何でもいいです。
Xvfb :99 & export DISPLAY=:99
エクスポートしてみる
これで準備完了です。以下のコマンドラインでシートの4シート目を画像(PNG)にエクスポートできます。
drawio --export --page-index 4 --output sample04.png sample.drawio
スクリプト化する
上記のコマンドラインだと、1シート毎にコマンドを打つことになってしまい面倒なので、これをスクリプト化します。
#!/bin/bash file=$1 count=$(grep -o "<diagram" "$file" | wc -l) # Export each page as an PNG # Page index is zero based for ((i = 0 ; i <= $count-1; i++)); do drawio --export --page-index $i --output "$file-$i.png" "$file" done
<diagram
という数がシートの数と一致するようです。
あとはスクリプト名をdrawio-export.sh
などにして、実行権を与えて、PATHが通っている場所に配置すれば完了です。
chmod 775 drawio-export.sh mv drawio-export.sh ~/bin
使い方的には以下になります。
drawio-export.sh [ファイル名]
まとめ
今回Linuxでお話しましたが、Macでも同じことが出来るのは確認済みです。Macの場合はdrawioアプリの配置してあるPATHだけ探し出して、ディスプレイはあるので今回紹介した仮想ディスプレイの手順は不要で使えました。
これでさらにdrawio依存度が高くなりそうです。
シートの一括エクスポートなんて標準機能として
これでいろいろはかどるー。
誰かの参考になれば幸いです。
ではではー。
参考サイト
Draw.io - how to export all tabs to images using command line - Stack Overflow