/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

drawioを一括で画像(png)にエクスポートする

仕事でもプライベートでもよく使っているDrawio(現diagrams。以降ややこしいのでdrawioと記載します。)。

前々から複数のシートを一括で画像に変換できないかなと思っていて調べていて、ようやくやり方を見つけることが出来たので記事にしておきます。

ちなみにプラットフォームとしてはLinuxです。

LinuxCUIで使っている状態で、GUIはない状態、WebUIやVSCodeでdrawioを使用して、そのファイルにあるシートを一括でエクスポートするようなユースケースです。

 

drawioをダウンロード

まずはdrawioを以下のサイトからダウンロードします。Linuxなので、debをダウンロードしてきます。

github.com

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