2012年8月31日金曜日

[java]JavaでPDF出力

やりたいことはなんとなくPDF出力。
POIでさわって動的に作ったExcelをJODConverterでLibreOffice経由してPDFに出力できるとそれっぽいなっと。

やり方や考え方はここで示してくれている通りです。
http://d.hatena.ne.jp/s-ishigami/20110520/p1
ただ、いくつかハマったのでメモしときます。
Webでやる前に下記のようにコマンドラインで確認すればまあ問題ないと思いますので、コマンドラインまでのメモになります。

■環境とか

ubuntu-12.04-server-amd64.iso
java version "1.6.0_24" (OpenJDK)
JODConverter2.2.2
LibreOffice 3.5

■手順


1.フォントをインストール

sudo apt-get install otf-ipafont
これやらないと日本語が豆腐になります。もちろんなりました。
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0153

2.LibreOfficeをインストール
http://d.hatena.ne.jp/pochio_pochiyama/20110126/p1

$ sudo apt-get purge "openoffice*.*"
$ sudo add-apt-repository ppa:libreoffice/ppa
$ sudo apt-get update
$ sudo apt-get install libreoffice libreoffice-gnome libreoffice-l10n-ja

add-apt-repository がなかったので。
http://vmem.jp/2010/11/10/add-apt-repository%E3%81%8C%E3%81%AA%E3%81%84/
$ sudo aptitude install python-software-properties

3.LibreOfficeをサービスで起動
http://www32.atwiki.jp/parepan/pages/144.html
結論・・・・

OpenOfficeは「2.4.1日本語版のRPM, JRE付き」を使用した。
 OOo_2.4.1_LinuxIntel_install_wJRE_ja.tar.gz
 解凍してX-windowからsetupを実行してインストールした。

OpenOfficeをサービスで起動する場合は
 # soffice -headless -accept="socket,port=8100;urp;" -nofirststartwizard
 ※「-nofirststartwizard」で起動しないとダメです。

jodconverter-2.1.1を使う。
java -jar jodconverter-2.1.1/lib/jodconverter-2.1.1.jar test.ppt test.pdf

私の環境ではオプションの指定で怒られたので、こんなコマンドでした。
soffice --headless --accept="socket,port=8100;urp;" --nofirststartwizard

実はフォントをこのあとにインストールしてサービス起動し直さず、文字化けの豆腐が直らない直らないとわめいておりましたw
この手順通りにすれば豆腐にはならないです。

4.JODConverterをインストール(というかzip解凍)
http://sourceforge.net/projects/jodconverter/files/JODConverter/2.2.2/

DLするのはこれ。
jodconverter-2.2.2.zip

tomcatやjettyで使うならこれ。
jodconverter-webapp-2.2.2.zip

5.JODConverterを実行して変換
http://chipmunkland.blog104.fc2.com/blog-entry-198.html

java -jar jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar input.xls output.pdf


ここまでできればきっとWebアプリでの連携もできると思います。
フロントエンドのWebアプリでリクエストを受けて、その内部でlocalhost:8080 的なサーバにリクエストレスポンスでバイナリを受け渡すか、Webアプリ内でシェルを実行するかの違いかな。
初めてやったんですが、なかなかおもしろかった。

0 件のコメント:

コメントを投稿