ImageMagickとlibreofficeを使ったOffice->PDF->PNG変換について(コマンドライン編)

  • 29
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

uploadされたoffice関連ファイルをWebでサムネイル表示するための事前調査としてImageMagickとlibreofficeをインストールしてその動作を調べてみました。

ツールのインストール

>sudo yum -y install ImageMagick ImageMagick-devel libreoffice xorg-x11-server-Xvfb

私はvagrantでやったのですが、もの凄く時間がかかるので覚悟を!!

フォントのインストール

日本語TrueTypeフォント「IPAフォント」と「IPAexフォント」をインストールします。

これをやらないと、日本語が「□□□□」とかになります。

IPAexフォント・IPAフォントのダウンロード

上記サイトからあらかじめIPAfont00303.zipとIPAexfont00201.zipをダウンロードしておいてください。

>unzip IPAfont00303.zip
>sudo mkdir /usr/share/fonts/japanese
>sudo mkdir /usr/share/fonts/japanese/TrueType
>sudo mv IPAfont00303/*.ttf /usr/share/fonts/japanese/TrueType/

>unzip IPAexfont00201.zip
>sudo mv IPAexfont00201/*.ttf /usr/share/fonts/japanese/TrueType/
>sudo fc-cache -fv

※エラーがでたらmvをcpに変えて実行してみてください。

DISPLAYの設定

サーバーなので通常DISPLAYは無いのですが、libreofficeはフレームバッファを使用します。ツールのインストールで仮想フレームバッファ X サーバ(xorg-x11-server-Xvfb)をインストールしているので、コマンドラインでlibreofficeを使用する前にDISPLAY変数と仮想フレームバッファ X サーバを起動しておきます。

>export DISPLAY=:1.0
>Xvfb :1 &

こんなエラーが表示されますが、

> Internal error:   Could not resolve keysym XF86AudioMicMute
Errors from xkbcomp are not fatal to the X server

今は気にしないことにします。(Audio関係のデバイスが存在しないためのエラーでこれからの検証する動作には関係ないので)
起動に失敗しているように見えますが、そのままENTERキーを押下してください。(コマンドは完了しています)

OFFICE->PDF変換

>libreoffice --headless --convert-to pdf 変換元ファイル.rtf

例としてrtfを変換していますが、pptxでもxlsxでもかまいません。
出力ファイルは「変換元ファイル.pdf」として出力されます。
※ここでも「XF86AudioMicMute」が表示されますが今は気にしないでください、同様にそのままENTERキーを押下してください。(コマンドは完了しています)

libreofficeの細かい使い方は

>libreoffice --help

などで確認してみましょう。

PDF->PNG変換

>convert 変換元ファイル.pdf 出力ファイル名.png

これでPNGに変換できます。
JPEGなど他の形式にしたい場合は拡張子を変えてみてください。
これも細かい使い方は

>convert --help

などで確認してみましょう。

おまけ(rmagickについて)

Railsでプロジェクトを作るのが面倒なので簡単に確認します。

>gem install rmagick

をあらかじめ実行しておきます。

変換対象となる適当なtest.xlsxと下記のtest.rbを用意します。

test.rb
require 'RMagick'

# test.xlsxをtest.pdfに変換する
list = open('| libreoffice --headless --convert-to pdf test.xlsx') {|msg| msg.gets}

# test.pdfの1ページ目だけをロード
img = Magick::ImageList.new("test.pdf" + '[0]')

#test.pngとして保存
img.write("test.png")

下記コマンドを実行します。

> ruby test.rb

test.pdfとtest.pngが出来ているのを確認しましょう。

関連エントリ

【Windows7】VirtualBox + Vagrant + Ruby + Rails4 開発環境の構築【mysql編】
【Windows7】VirtualBox + Vagrant + Ruby + Rails4 開発環境の構築【RubyMine編】
【Yosemite】Mac OSX 10.10 Yosemite に Ruby + Rails4 開発環境の構築【初心者必見】
【Yosemite】Mac OSX 10.10 Yosemite にAMP環境の構築【初心者必見】【続編】

筆者紹介

札幌圏でリモート開発、在宅勤務を中心としたシステム開発の会社を立ち上げました!
ローラハウス