Base64 を PowerPoint ファイルにデコードする方法
- Base64 または data URI に Base64 を貼り付けます。
data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64,接頭辞があっても構いません。テキストとして保存された長い文字列は .txt ファイルを開く で扱えます。 - スライドのテキスト に、すべてのスライドが番号(スライド 1、スライド 2 など)の下に並び、各段落のテキストが 1 行ずつ表示されます。テキストのないスライドは
…と表示されます。 - その下のエントリ一覧には、ファイルのすべての構成要素が 表示 と 保存 のボタン付きで並びます。
- ファイルをダウンロード を押して .pptx を保存します。
テキストはブラウザの XML パーサーでスライドの XML から取り出します。プレゼンテーション内のものが実行されることはなく、ページが送るネットワークリクエストは Cloudflare のページビュー計測だけです。
スライドのテキストに含まれるもの
各スライドは .pptx 内の個別の XML ファイルで、プレビューはその中のすべての段落のテキストを取り出します。タイトル、本文のプレースホルダー、テキストボックス、図形、グループ化された図形、表のセルです。非表示に設定されたスライドも含まれます。読み込むのは最大 200 枚です。
ほかの場所に保存されているものは表示されません。
| 内容 | 保存場所 | 確認方法 |
|---|---|---|
| 発表者ノート | ppt/notesSlides/notesSlideN.xml | 表示 で XML を確認 |
| SmartArt のテキスト | ppt/diagrams/dataN.xml | 表示 で XML を確認 |
| グラフ | ppt/charts/chartN.xml。数値は埋め込みのブック内 | ppt/embeddings/ の埋め込み .xlsx を 保存 |
| 画像と動画 | ppt/media/ | 表示 でプレビュー、保存 でダウンロード |
| コメント | ppt/comments/ | 表示 で XML を確認 |
スライドは、slide1.xml、slide2.xml のようにファイル名の番号順に並びます。通常はこれが資料の順序ですが、スクリプトで並べ替えたプレゼンテーションでは古いファイル番号が残っていることがあるので、番号は目安として扱ってください。
PPTX かどうかを確認する
Office Open XML のファイルはどれも ZIP アーカイブなので、PowerPoint の資料も Word 文書や Excel ブックと同じく、Base64 では UEsDB で始まります。ツールはエントリの中に ppt/ フォルダーがあるかを調べて区別します。内容が別の形式の場合は、注意書きが表示され、正しい拡張子が提案されます。
| 判別結果 | 注意書き |
|---|---|
| DOCX または XLSX | 「これは PPTX ではなく DOCX のようです。」と .docx としてダウンロード |
PDF(JVBERi0) | PDF として書き出された資料。.pdf としてダウンロード が付きます |
DOC/XLS/MSG (OLE)、0M8R4KGxGuE | PowerPoint 97~2003 の古い .ppt か、パスワード保護された .pptx。ツールはどちらか区別できないので、前者なら 拡張子 に ppt と入力し、後者なら pptx のままにしてください |
マクロ付きの資料(.pptm)には ppt/vbaProject.bin が含まれます。テキストは普通にプレビューできますが、PowerPoint は拡張子が .pptm の場合しか開かないので、ダウンロードの前にそう入力してください。
Python でスライドのテキストを読む
標準ライブラリだけで、プレビューと同じ順序でスライドごとのテキストを一覧できます。
import base64, io, re, zipfile
import xml.etree.ElementTree as ET
A = "{http://schemas.openxmlformats.org/drawingml/2006/main}"
with open("deck.b64") as f:
pptx = base64.b64decode(f.read())
with zipfile.ZipFile(io.BytesIO(pptx)) as z:
slides = [n for n in z.namelist() if re.fullmatch(r"ppt/slides/slide\d+\.xml", n)]
slides.sort(key=lambda n: int(re.search(r"\d+", n).group()))
for name in slides:
root = ET.fromstring(z.read(name))
lines = ["".join(t.text or "" for t in p.iter(A + "t")) for p in root.iter(A + "p")]
print(name, [s for s in lines if s.strip()])
このページのサンプル資料なら、ppt/slides/slide1.xml ['Hello from Base64', 'A two-slide deck built in your browser.'] と、スライド 2 についても同様の内容が表示されます。正確なスライドの順序が必要なら、ppt/presentation.xml の <p:sldIdLst> 要素にあります。詳しくは Python での Base64 を、アーカイブとしての扱いについては Base64 を ZIP に変換 を参照してください。
よくある質問
Base64 を PowerPoint ファイルにするには?
上に文字列を貼り付けて ファイルをダウンロード を押してください。プレゼンテーションは decoded.pptx として保存されます。別の名前にしたい場合は、先に ファイル名 を変更してください。
発表者ノートは表示されますか?
スライドのテキストには含まれません。ノートは ppt/notesSlides/notesSlide1.xml などに保存されています。エントリ一覧でその横にある 表示 を押すと XML を読めます。テキストは <a:t> 要素の中にあります。
スライドを画像として見られますか?
見られません。このページはスライドのテキストだけを読み、描画はしません。資料内で使われている画像は、エントリ一覧の ppt/media/ から 1 つずつ表示・保存できます。