ブログ

ryuzeeによるブログ記事。不定期更新

直近開催のScrum Alliance認定スクラムマスター研修のご案内

パワーポイントやPDFをコマンドラインで画像に変換する方法

みなさんこんにちは。@ryuzeeです。

はじめに

ちょっとしたアプリをサンデープログラミング作っていて、アップロードしたパワポファイルやPDFのプレビューやサムネイル機能を付けたいなーと思ったので、その前提となるファイルの変換について説明します。環境はVagrant上で起動したUbuntu 14.04です。

一番簡単な方法

PDFであれば一番簡単な方法はunoconvとimagemagickの組み合わせでいける。以下のようにして必要なコマンドをインストールします。

sudo apt-get install unoconv
sudo apt-get install imagemagick

ここまでできたら、以下のようにコマンドを実行します。

convert -density 600 -geometry 1000 hoge.pdf hoge_%03d.jpg

ただし、変換後の画像が汚いのが気に食わない..

綺麗に変換する方法

上の方法は簡単だけど、画像が汚いと意味がないので、もう一段工夫します。ここではxpdfを使って、pdfを一度ppmに変換し、その後画像に変換することにします。

まずxpdfをインストールします。

sudo apt-get install xpdf

その上で以下のように実行します。

pdftoppm hoge.pdf hoge
mogrify -format jpg hoge*.ppm

比べてみると分かりますが、だいぶ画像が綺麗です。

パワポのファイルから変換をしたい場合

パワーポイントのファイルを直接unoconvで変換することはできないので、OpenOfficeとの組み合わせ技でいきます。OpenOfficeはGUIがあるので、仮想バッファフレームが必要です。

まず、Xvfbをインストールして起動します。

sudo apt-get install xvfb
export DISPLAY=:1.0
Xvfb :1 &

日本語フォントをインストールします。適当に入れてください。なお、オープンソースのフォントであれば問題ないですが、例えばMacやWindowsに入っているフォントをそのまま持っていくのはライセンス違反になると思うので注意が必要です。

sudo apt-get install ttf-mscorefonts-installer
sudo apt-get install fonts-vlgothic
sudo apt-get install fonts-mplus
sudo apt-get install fonts-migmix

次にOpenOfficeをインストールします。日本語入りのPDFを変換するだろうと思うので、日本語版のOpenOfficeが良いかと思います。

wget "http://downloads.sourceforge.net/project/openofficeorg.mirror/4.1.1/binaries/ja/Apache_OpenOffice_4.1.1_Linux_x86-64_install-deb_ja.tar.gz"
tar xvfz Apache_OpenOffice_4.1.1_Linux_x86-64_install-deb_ja.tar.gz
cd ja/DEBS
sudo dpkg -i *.deb

これでOpenOfficeはインストールできたので、unoconvをlistener付きで起動します。

unoconv --listener &

起動すると、以下のようなプロセスがいるはずです。

/usr/lib/libreoffice/program/soffice.bin

これで準備が整ったので、パワーポイントファイルを変換します。

unoconv -f pdf Fuga.pptx
pdftoppm Fuga.pdf Fuga
mogrify -format jpg Fuga*.ppm

各種デーモンを自動起動するようにしておく

ここまででやりたいことは終わっているのですが、サーバ再起動した際などに自動でデーモンを動くようにしたいので、supervisordを使って制御します。

まだsupervisordをインストールしていない場合は以下のようにインストールします。

sudo apt-get install supervisor

設定ファイルを、/etc/supervisor/conf.d/unoconv.confなどの名前で以下の内容で作成します。

[program:xvfb]
command=Xvfb :1
user=vagrant
autostart=true
autorestart=true
stdout_logfile=/var/log/xvfb.log
redirect_stderr=true

[program:unoconv]
command=unoconv --listener
user=vagrant
autostart=true
autorestart=true
stdout_logfile=/var/log/unoconv.log
redirect_stderr=true
environment=DISPLAY=:1
stopasgroup=true

終わったら一旦起動しているプロセスをkillした上で、supervisorを再起動すればOKです。サーバを再起動しても動作することを確認しておくと良いでしょう。

それでは。

アジャイル開発チーム向けのコーチングや、技術顧問、Scrum Alliance認定スクラムマスター研修などのトレーニングを提供しています。お気軽にご相談ください(初回相談無料)
前の記事 Jenkins + PackerでAMIを継続的インテグレーションする
次の記事 AWSを使ってスライドを公開するデモアプリを作ってみた話

プロダクト開発で、こんな課題を感じていませんか?

  • 何を作るべきか、順位の決め方が定まらない
  • プロダクトの方向性をチームで共有できていない
  • 開発組織の体制や役割がうまく機能していない
  • 開発プロセスが形骸化し、目的を見失っている
  • アジャイルを導入したが、組織に定着しない

プロダクトマネジメント、組織構造、開発プロセスの課題について、組織全体の視点から支援します。

お問い合わせ(初回相談無料)

契約を前提にした相談でなくて構いません。相談に際して事前の整理や準備は不要です。

Aligned ―プロダクト開発におけるステークホルダーとの関係性の築き方
ダイナミックリチーミング 第2版
Tidy First?
脳に収まるコードの書き方
プロダクトマネージャーのしごと 第2版
エンジニアリングマネージャーのしごと
チームトポロジー
スクラム実践者が知るべき97のこと
プロダクトマネジメント
SCRUM BOOT CAMP THE BOOK
みんなでアジャイル
レガシーコードからの脱却
Effective DevOps
変革の軌跡
ジョイ・インク
アジャイルコーチの道具箱
カンバン仕事術
Software in 30 Days
How to Change the World