Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

概要

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環境の構築【初心者必見】【続編】

筆者紹介

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

motomiya326
リモート開発、在宅勤務を特色とするシステム開発会社ローラハウスの業務執行社員として勤務しております。 ロックバンドのベーシストとしても現在活動中のロックプログラマーです。 Web系システム、スマートフォンアプリの開発のご用命はお気軽にどうぞ。
http://laurahouse.net
laurahouse
北海道を拠点にしてリモートワークでのスマートフォンアプリの開発を得意とするエンジニアによる技術者集団です。スマートフォンアプリの開発のご用命はお気軽に!
http://laurahouse.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away