pdf2odp

学会の指定フォーマット

学会発表の口演などで、PowerPointファイルのみを受け付けるケースにしばし ば遭遇する。最近のPowerPointはOpenOffice.org Impressのodpファイルもその まま読めるようなことも聞くが、PowerPoint 2003 Windows版のファイルののみ を受け付けると、注意書きに書いてあれば、pptファイルを用意する他ない。

PDFスライド

普段の研究会や講義ではLaTeXによるpdfスライドを使っているが、これをどの ようにpptファイルに変換するかが問題である。

pdf2odp

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ゴシックの方が綺麗に見える。

追記(2011年11月2日)

$ pdf2odp jstm52jaih26-slide.pdf
/usr/local/bin/pdf2odp only accepts pdf files, exiting.

このようなエラーがでた。 ここに書いてあるように、pdf2odpの26行目にピリオドを追加すると正常に動作するようになった。

odp2ppt

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}を出力しました