pptx_notes_word.py ドキュメント

概要

pptx_notes_word.py は、PowerPointファイル (.pptx) のスライドノート(発表者ノート)と、テキストベースの原稿ファイル (.docx, .txt, .md) の間でテキストデータを相互変換するためのコマンドラインツールです。ノートの内容を一括で書き出す機能と、外部で編集したテキストを各スライドのノートへ一括で書き戻す機能を提供します。

動作原理

本スクリプトは、画像のPDF化やOCR抽出といった複雑な計算やアルゴリズムを伴う処理を行うものではなく、ドキュメントフォーマット間のデータ移送を行うユーティリティプログラムです。

原稿ファイル内の各スライド用テキストは、以下の正規表現パターンに合致するヘッダーによって識別されます。 ^\s*#\s*(?:スライド|Slides?)?\s*(\d+)\s*$

これにより、# スライド 3 や # 3 のような行を区切りとして、スライド番号とそれに紐づくテキストブロックを解析します。

処理モードは大きく分けて以下の2つです。

  • ノートへの書き込み (word2pptx / notes2pptx) 指定された原稿ファイルからスライドごとのテキストを読み取り、PowerPoint上の対応するスライドノートを上書きします。原稿ファイルとは別にナレーションファイルが指定された場合、原稿とナレーションを ---\n((\n{narration}\n)) という区切り文字を用いて結合し、ノートに書き込みます。また、--split_lines オプションが有効な場合は、テキストの行数に合わせて元スライドを自動的に複製し、各スライドに1行ずつノートを割り当てます。

  • ノートの抽出 (pptx2word / pptx2notes) PowerPoint内の全スライドを順に走査し、各スライドのノートテキストを取得して指定の原稿ファイル (.docx, .txt, .md) に書き出します。出力時には、再度読み込み可能なようにスライド番号のヘッダーが自動的に付与されます。

依存関係

本プログラムはPython標準ライブラリに加え、以下の非標準ライブラリに依存しています。

  • python-pptx : .pptx ファイルの読み込み、ノートテキストの抽出、スライドの複製および保存に使用します。

  • python-docx : 原稿ファイルとして .docx 形式を入出力する場合にのみ必要です。

入出力仕様

入出力されるファイルおよびコマンドラインオプションの仕様は以下の通りです。

  • 入力ファイル

    • .pptx ファイル: 読み込み元、または書き込み先となるPowerPointファイル。

    • 原稿ファイル (.docx, .txt, .md): スライドに書き込むためのテキストデータ、または抽出データの保存先ファイル。

    • ナレーションファイル (.docx, .txt, .md): (任意) 原稿データに追記するための追加テキストファイル。

  • 出力ファイル

    • .pptx ファイル: ノートが更新またはスライドが複製されたPowerPointファイル。

    • 原稿ファイル (.docx, .txt, .md): 抽出されたノートテキストが保存されたファイル。

  • コマンドラインオプション

    • --mode : 変換の方向を指定します。word2pptx, pptx2word, notes2pptx, pptx2notes のいずれかを指定します (必須)。

    • -p, --pptx : 対象の .pptx ファイルのパスを指定します (必須)。

    • files (位置引数): 原稿ファイル、および必要に応じてナレーションファイルを指定します (最大2つ)。

    • -w, --word, --notes : 位置引数の代わりに原稿ファイルを指定するためのレガシーオプションです。位置引数との併用はできません。

    • --split_lines : word2pptx および notes2pptx 実行時、原稿の行数(空行を除く)に合わせてスライドを複製するかどうかを指定します。true, 1, yes, on のいずれかで有効になります (デフォルト: False)。

    • -o, --output : ノートを書き込んだあとの .pptx ファイルの出力先を指定します。省略した場合、入力元のファイルが上書きされます。ノート抽出モード (pptx2word 等) では無視されます。

実行例

pptx2word モードを使用して、PowerPointファイルからスライドノートを抽出し、Markdownファイルとして保存する例:

python pptx_notes_word.py --mode pptx2word -p presentation.pptx output_notes.md

word2pptx モードを使用して、MarkdownファイルのテキストをPowerPointのノートに上書きする例(元のPowerPointファイルを上書き):

python pptx_notes_word.py --mode word2pptx -p presentation.pptx input_notes.md

原稿ファイルとナレーションファイルの両方を指定し、結合したテキストを新しいPowerPointファイルに出力する例:

python pptx_notes_word.py --mode word2pptx -p presentation.pptx input_notes.md input_narration.md -o output_presentation.pptx

--split_lines を有効にして、テキストファイルの各行ごとにスライドを複製しながらノートを割り当てる例:

python pptx_notes_word.py --mode word2pptx -p presentation.pptx input_notes.txt --split_lines true