.pptx ファイルと戯れる (主にテキストエディタで)

技術研究所の (あ) です。
しばらく前に知人から
「PowerPoint で作った黒背景のスライドを白背景に変更したい。
スライドマスタで背景色を変えると、字や図が真っ白で見えなくなってしまう。
ページ数がけっこうあるので、手動でいちいち直すのも大変。
何かよい方法はないか?」
というような感じの相談を受けました。
PowerPoint の使い方はさほど詳しくなくて何が一番まっとうな方法は知らないのですが、
「.pptx ファイルの実態は zip されたファイル群なので、
展開して中身を直接いじればいくらか楽かも」と答えました。

ということで .pptx ファイルの中身を直接いじってみた話です。
「いじってみた」程度なので、あまり検証・調査しておらず、
.pptx ファイルの正確な仕様ではない部分も多々あると思いますが、
その辺りは予めご容赦下さい。

ファイル形式の概要については、
MSDN の「Office (2007) Open XML ファイル形式の概要」なども
ご参照下さいませ。

序章

ここではサンプルとして下のような
四ページほどのスライドのファイルを使います。
展開した後のファイルをシンプルにするために、
スライドマスタのうち使っていないものは削除しておいたりすると吉です。

pptx_sample0

 

ちなみにスライドマスタで背景&文字色を変更してみると、こんな感じに。

pptx_sample2

マスタの文字色設定を使っている部分は一括で変換されていますが、
独自に色指定してある部分はそのまま。
画像が小さくて判りづらいですが、文字部分の「→」が見えなくなっています。
知人の設定だと文字がほぼ見えなくなっていたので、
それだと確かに途方に暮れるでしょう…。
図部分も、背景が黒だったので見えていますが、
透過色だと見えなくなってしまいますし、余計に途方に暮れそうです。

.pptx ファイルを展開する

さて、ご存知の方も多いと思いますが、
上に書いた通り、.pptx ファイルは実は zip されたファイル群です
(末尾に x のつく他の MS Office のファイル (.xlsx や .docx) も同様です)。
展開すると、貼り付けられている画像のファイルや、
各スライドに対応する XML ファイル (.pptx の x はたぶん XML の X) などが現れます。

展開するには、ファイル名の拡張子を .pptx → .zip に変更して
展開アプリに放り込みます。
あるいはたとえば Lhaplus の右クリックメニューの「ここに解凍」だと
.pptx の拡張子のままで展開が可能です。
展開すると、_rels, docProps, ppt の三つのフォルダと、
[Content_Types].xml というファイルが現れます。
逆にこれらを zip に再圧縮し、拡張子を .zip → .pptx に換えると、
何事もなかったように PowerPoint で開けるはずです。

もちろん、元のファイルにパスワードが掛かった状態だとこのような展開はできません。
再圧縮でパスワード付き zip にして拡張子を .pptx にしても開けません。
さすがに単純にパスワード付き zip、というわけではないようです。

スライドのデータの本体は、主に ppt というフォルダの下に、
いくつかのフォルダに分かれて収まっています。
slides, slideMasters, slideLayouts, theme, notesMaster, notesSlides などの
フォルダ名からその下にあるデータはおおよそ判るかと思います。
フォルダの中身は、PowerPoint 上でどういう設定や編集を行ってきたかなどで
ファイルの数などが変わります。
たとえば、slides の下には、スライドのページ一枚一枚に対応した
slide*.xml というファイルがあります。

スライドマスタをいじる

まずはスライドマスタで変更してみたのと同じようなことを
XMLファイルを編集してやってみましょう。
slideMasters のフォルダの slideMaster1.xml というファイルをテキストエディタで開きます。
XMLに対応した編集・表示モードがあるものだと見やすくしてくれるでしょうけれど、
シンプルなテキストエディタだと、改行の入ってない XML の羅列が表示されると思います。
“><” を “>^J(改行)<” に変換するなどで改行を入れると見やすくなります
(改行のある状態で再圧縮してもちゃんと普通に PowerPoint で開けます)。

見やすくしたら (しなくてもよいですが…)、
“clrMap” という文字列を検索してみてください。

<p:clrMap bg1=”dk1″ tx1=”lt1″ bg2=”dk2″ tx2=”lt2″ accent1=”accent1″ accent2=”accent2″ accent3=”accent3″ accent4=”accent4″ accent5=”accent5″ accent6=”accent6″ hlink=”hlink” folHlink=”folHlink”/>

こんな行があるはずです。
スライドマスタをいじってあると、複数出てくるかもしれません。
bg1 がメインの背景色、tx1 がメインの文字色です。
その値の “dk1″ などは「テーマ」で設定されている色を指しており
(dk = dark, lt = light だと思われます)、
色の値(RGB値)は theme/theme1.xml などに記述されています。
ここでは clrMap を、bg* が dk* なのを lt* に、tx* が lt* なのを dk* に、
それぞれ書き換えます。

<p:clrMap bg1=”lt1″ tx1=”dk1″ bg2=”lt2″ tx2=”dk2″ accent1=”accent1″ accent2=”accent2″ accent3=”accent3″ accent4=”accent4″ accent5=”accent5″ accent6=”accent6″ hlink=”hlink” folHlink=”folHlink”/>

この状態で再圧縮すると、

pptx_sample2

こうなります。各スライドのタイトルの色が薄くて見えづらいので、
上述の clrMap のちょっと下、p:titileStyle の中の schemeClr の val の設定が
“accent1” になっていたのを “tx2” に変えると、

 

pptx_sample1

こうなります。

ちなみにこの bg1 ~ accent6 までの10色が、
PowerPoint 上で色の設定を行う場合に出てくるパレットの上に
「テーマの色」として並んでいるものの一番上の行に対応します。
その下に並ぶ行の色は、一番上の行の色に明るさの調整を掛けたものになっています。
「テーマの色」から色を選ぶと、bg1 のようなラベル名で色が参照され、
それ以外の色を選ぶと、RGB の値 (16進6桁) で色が直接指定されます。

palette1

スライドをいじる

テーマの色以外から設定した色を変更したい場合は、
slides/slide* .xml の中から該当の箇所を “srgbClr” という文字列などを頼りに探してください
(テーマの色を指定している箇所は “schemeClr” がキーワードです)。
知人のファイルの文字色の指定は全てこちらの形式だったので、
(他にたまたま同じ文字列が登場しないのを確認した上で)
「全ての slide* .xml 中の “FFFFFF” と “000000” を入れ替える」
という作業が必要でした。
ページ数が多いときは sed とかの出番ですね。

サンプルの場合、載せた画像では見づらいですが一ページ目のテキストの矢印が二箇所、
“bg2” が指定されていて色的に見えなくなっていたので、
“→” で slide1.xml 内を検索して、そのタグのブロックの色指定しているところ
を “tx2” に書き換えました。

テーマをいじる

サンプルの 1, 2ページの文字でオレンジ色になっている部分がありますが、
背景が白だとやや見づらいのでこれの色も変えてみます。
スライドの XML をいじってもよいのですが、今度はテーマ自体をいじってみます。
この色は accent6 に明るさの補正が掛かった色なので、
theme/theme1.xml の最初のほうの <a:accent6>~</a:accent6> のところを書き換えます。
a:srgbClr のタグの val の値 (16進6桁) を F79646 から補色の 0869B9 にします。
これで、オレンジ色の文字が水色になります。

pptx_sample3

画像をいじる

スライドに貼り付けられている画像のファイルなどは、
media というフォルダの下にあります。
サンプルの場合は、四つの png ファイルがあります。
これを PhotoShop などの画像エディタで編集・保存すれば、
配置などの情報はそのままに画像を差し替えられます。
今回は色を全て反転した上で、矢印部分の色などをペイントツールを使って調整し、保存しました。

pptx_sample4

写真を差し替えたりしたい場合やちょっと修正を加えたい場合など、
貼り直すと大きさや位置の調整が面倒だったりする場合は、
この、展開して置き換えて再圧縮する、という方法が便利です。

数式画像の生成ツールとして PowerPoint を使う

ウェブなどにちょっと数式を載せたい場合など、
数式の画像を作りたいことがあります。
PowerPoint 上で [挿入]→[数式] を使って書かれたスライド上の数式は、
実は画像になっているので、
右クリック→[図として保存] や上述の方法で個々の数式を、
背景透過の PNG 形式の画像ファイルとして取り出すことができます
(上のサンプルの数式っぽい部分は単純に上付き文字などで入力したので画像になっていませんでした)。
人によってはこれはなかなか便利かもしれません。

math1

まとめ

実用性がどの程度あるかはさておき(笑)、
.pptx ファイルはこうやっていじることができる、
ということを知っていると、ちょっと楽しいかもしれません。
今回は手作業でしたが、プログラムを作って
自動で展開・書き換え・再圧縮なんてことも難しくなさそうです
(複数ファイルに対して背景画像の一括変更とか需要あるかも? (既にあるかも…))。
あ、python-pptx なんていう楽しげなものが! 🙂

そのうち .xlsx や .docx もいじって遊んでみよう…。

  • このエントリーをはてなブックマークに追加