draw.io (Diagrams.net) のデータを個別にpdf化します。 python環境およびdraw.ioのデスクトップ版が必要です。
- 仕様上1ページ目を飛ばしてしまいます。
- コマンド上では1ページ目は0を指定するのですが、0にすると全ページが印刷されてしまいます。バグor仕様のようです
- 1ページ目にいらないページを作って対処してください
- デスクトップ版のインストールが必要です。
- Windows版しか動作確認していません。
- <draw.ioファイル名>-<シート名>の形で各シートが1枚ずつpdf化されます。
参考
以下の画像の変換を多大に参考にさせていただいております。 * 主要参考元:https://qiita.com/ryo_i6/items/6ebbeadd181da4d0b5b3 draw.ioの全ページを一括変換する * ヘルプ: https://qiita.com/u4da3/items/646cc46bff68b380cbfa draw.io をコマンドラインで実行して、画像ファイルをエクスポートする 詳細なセットアップなどは参考元をご覧ください。
セットアップ
(箇条書き。この下に画像付きの手順があります)
- ローカルのdraw.ioアプリをダウンロードする https://github.com/jgraph/drawio-desktop/releases/
- Windows PowerShellを開く
- pythonを打ってenter
- Microsoft Storeのウインドウが出てきたらインストールを押す。出てこなかったら、何もしない
- PowerShellを閉じる
- 添付のソースコードを「drawio_pdf_export.py」というファイル名でどこかに保存する
- 同じディレクトリに「drawio_pdf_export」というフォルダを作る
- pdf化したい.drawioファイルを用意する
- 拡張子が付いていない場合、拡張子を「.drawio」にする
- 先ほど作ったpdfフォルダに.drawioファイルを入れる
- PowerShellを新しく開く
- cdコマンドで先ほどのディレクトリに移動する
- 「python .\drawio_pdf_export.py」を打つ
- Enterを押すと変換が始まる
以上で完了
- ローカルのdraw.ioアプリをダウンロードする https://github.com/jgraph/drawio-desktop/releases/
- Windows PowerShellを開く
- pythonを打ってenter
- Microsoft Storeのウインドウが出てきたらインストールを押す。出てこなかったら、何もしない (この操作はPythonの初回インストール時のみ必要です。よって環境によっては出てこないことがあります。)
- PowerShellを閉じる
- 添付のソースコードを「drawio_pdf_export.py」というファイル名でどこかに保存する
- 同じディレクトリに「drawio_pdf_export」というフォルダを作る
- pdf化したい.drawioファイルを用意する(Web版draw.ioからダウンロードする場合は画像のようにSave as→Deviceを選ぶとダウンロードされます。
- 拡張子が付いていない場合、拡張子を「.drawio」にする
- 先ほど作ったpdfフォルダに.drawioファイルを入れる
- PowerShellを新しく開く
- cdコマンドで先ほどのディレクトリに移動する
- 「python .\drawio_pdf_export.py」を打つ
- Enterを押すと変換が始まる
- 完了 pdfフォルダ内に変換した後のpdfがある。
コード
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_pdf(file_path): DRAWIO = '"C:\Program Files\draw.io\draw.io.exe"' #draw io デスクトップ版の場所 FILE_TYPE = 'pdf' #各種オプションの調整が必要だが、これを変更するとそれぞれの形式にできる root = et.parse(file_path).getroot() # xmlのroot draw.ioの場合は<mxfile>というタグ print(root.get('pages')) #debug print(range(int(root.get('pages')))) #debug # 1ページずつ印刷 # ページ番号はdraw.io コマンドでもxml.etreeでも0から始まる。draw.ioのGUIでは1ページから for i in range(1, int(root.get('pages')) ): page_name = root[i].get('name') # 各オプションの中身 g = ' '.join(['-g', str(i)+'..'+str(i)]) o = ' '.join(['-o', '"' + str(get_output_path(file_path, page_name, FILE_TYPE)) + '"']) # run command = ' '.join([DRAWIO, '"' + str(file_path) + '"', '-x', g, o]) print(command) #debug subprocess.run(command) #コマンドの実行 if __name__ == '__main__': root_dir = Path.cwd() for i in root_dir.glob('drawio_pdf_export\\*.drawio'): generate_pdf(i.relative_to(root_dir)) # 参考 # 主要参考元:https://qiita.com/ryo_i6/items/6ebbeadd181da4d0b5b3 draw.ioの全ページを一括変換する # ヘルプ: https://qiita.com/u4da3/items/646cc46bff68b380cbfa draw.io をコマンドラインで実行して、画像ファイルをエクスポートする