学会発表の口演などで、PowerPointファイルのみを受け付けるケースにしばし ば遭遇する。最近のPowerPointはOpenOffice.org Impressのodpファイルもその まま読めるようなことも聞くが、PowerPoint 2003 Windows版のファイルののみ を受け付けると、注意書きに書いてあれば、pptファイルを用意する他ない。
普段の研究会や講義ではLaTeXによるpdfスライドを使っているが、これをどの ようにpptファイルに変換するかが問題である。
Pythonでかかれたpdfファイルをodpファイルに変換する pdf2odp は、 latexslidesに含まれる。これを実行するには、odfpyが必要である。
odfpyは、Ubuntuのリポジトリに無かったので、tar.gzからインストールした。 tar.gzを展開してカレントディレクトリに移動後、下記のようにする。
$ python setup.py build $ sudo python setup.py install
latexslidesもUbuntuのリポジトリに無かったので、tar.gzから入れた。うまく 動作するかどうか分からなかったので、とりあえず/tmpに仮インストール。
$ python setup.py install --install-data=/tmp $ python setup.py install --home=/tmp $ python setup.py install --prefix=/tmp
beamerで作成したPDFスライドを、 pdf2odp で変換したところ、odpファイルができあがった。
$ /tmp/bin/pdf2odp hoge.pdf Converting jeawpr2010.pdf to images using gs GPL Ghostscript 8.64 (2009-02-03) Copyright (C) 2009 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Processing pages 1 through 16. Page 1 Page 2 Page 3 Page 4 Page 5 Page 6 Page 7 Loading NimbusSanL-Bold font from /var/lib/defoma/gs.d/dirs/fonts/n019004l.pfb... 2800880 1359610 22699008 20692315 3 done. Page 8 Page 9 Page 10 Page 11 Page 12 Page 13 Page 14 Page 15 Page 16 Done... Presentation saved as hoge.odp
できあがったodpファイルは、1枚1枚画像化して貼り付けている様子。この方針 は、私はpdftoppmを使ったPDFの画像化に書いた、私が以前から取り入れている 方法と同じだ。ただ、手動でOpenOffice.org Impressに1枚1枚貼り付けていた のに対して、こちらは全自動だ。自力で自動化しようと考えていたところなの で、車輪の再発明は避けられた。
なお、日本語の場合もやってみた。
$ /tmp/bin/pdf2odp tmp.pdf Converting tmp.pdf to images using gs GPL Ghostscript 8.64 (2009-02-03) Copyright (C) 2009 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Processing pages 1 through 2. Page 1 Loading a TT font from /usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf to emulate a CID font VL-Gothic-Regular ... Done. Page 2 Loading a TT font from /usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf to emulate a CID font VL-Gothic-Regular ... Done. Done... Presentation saved as tmp.odp
日本語も問題ないが、VLゴシックになってしまう。
$ pdffonts tmp.pdf name type emb sub uni object ID ------------------------------------ ----------------- --- --- --- --------- OXTCEY+CMSS9 Type 1C yes yes no 4 0 GothicBBB-Medium-Identity-H CID Type 0 no no no 6 0 ARKYGB+CMSS12 Type 1C yes yes no 10 0 YYRNUN+CMSY10 Type 1C yes yes no 11 0
もとのPDFには、VLゴシックは入っていないが、中ゴシックBBBを指定してフォ ントを埋め込んでいないせいかもしれない。中ゴシックBBBはもちろん持ってい ないので、小塚フォントを埋め込んで試してみる。
$ cat koz2.map rml-jis H KozMinPr6N-Regular.otf gbm-jis H KozGoPr6N-Medium.otf $ dvipdfmx -f koz2.map tmp && pdffonts tmp.pdf tmp.dvi -> tmp.pdf [1][2] 7695 bytes written name type emb sub uni object ID ------------------------------------ ----------------- --- --- --- --------- ZZWKFK+CMSS9 Type 1C yes yes no 4 0 QWPGNO+KozGoPr6N-Medium-Identity-H CID Type 0C yes yes no 6 0 RZAZXZ+CMSS12 Type 1C yes yes no 10 0 ZSKFVU+CMSY10 Type 1C yes yes no 11 0 $ /tmp/bin/pdf2odp tmp.pdf Converting tmp.pdf to images using gs GPL Ghostscript 8.64 (2009-02-03) Copyright (C) 2009 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Processing pages 1 through 2. Page 1 Page 2 Done... Presentation saved as tmp.odp
どうやら、埋め込んだ小塚フォントは、VLゴシックに置き換えられることなく 画像化できたようだ。でも、先ほどのVLゴシックの方が綺麗に見える。
$ pdf2odp jstm52jaih26-slide.pdf /usr/local/bin/pdf2odp only accepts pdf files, exiting.
このようなエラーがでた。 ここに書いてあるように、pdf2odpの26行目にピリオドを追加すると正常に動作するようになった。
odpファイルは、OpenOffice.org Impressで開いて、ppt形式に名前をつけて保存することによって、pptファイルに変換することができるが、GUIで非常に面倒だし、スクリプト化もできない。コマンドラインでodpファイルをpptに変換するプログラムを探したところ、unoconvが見つかった。
$ apt-cache search unoconv unoconv - converter between OpenOffice.org document formats $ sudo apt-get install unoconv $ dpkg -L unoconv |grep bin/ /usr/bin/unoconv /usr/bin/doc2odt /usr/bin/odt2doc /usr/bin/doc2ooxml /usr/bin/ooxml2doc /usr/bin/odp2pdf /usr/bin/odp2ppt /usr/bin/ppt2odp /usr/bin/ods2pdf /usr/bin/odt2bib /usr/bin/odt2docbook /usr/bin/odt2html /usr/bin/odt2lt /usr/bin/odt2ooxml /usr/bin/ooxml2odt /usr/bin/odt2pdf /usr/bin/odt2sdw /usr/bin/sdw2odt /usr/bin/odt2sxw /usr/bin/sxw2odt /usr/bin/odt2rtf /usr/bin/odt2xhtml /usr/bin/odt2xml /usr/bin/odt2txt.unoconv $ odp2ppt jeawpr2010.odp get fences failed: -1 param: 6, val: 0 ** (soffice:21080): WARNING **: unable to get gail version number
よく分からない警告は出るが、きちんとpptが作成できた。
面倒なので、シェルスクリプトで省力化。これでpdfスライドをpptに一発変換できる。
#!/bin/sh if [ $# -eq 0 ] then echo USAGE: $0 pdf-file fi _FILE1=${1%pdf}odp _FILE2=${1%pdf}ppt pdf2odp $1 odp2ppt ${_FILE1} echo ${_FILE2}を出力しました