EclipseでJODConverter3.0のデバッグ
今までの経緯とここ数週間の間にアップした記事のまとめ。
- OpenOffice.orgかMS Office Excelで作った帳票をPDF変換したい。 記事。
- JODConverterを発見。odfファイルとxlsファイルをPDFに変換可能なことを確認。
- PHPでodfファイルを操作するライブラリを探す。いいのがない。記事
- PHPでxlsファイルを操作するライブラリを探す。PHP-Excelを発見。
- PHP-Excelを使って、Excelで作ったファイルを読み込んで特定のセルに値を挿入できることは確認。 記事
- PHP-ExcelでPDF出力できるけど、日本語が文字化け。PHP-Excelが使っているFPDFを日本語に対応しようと頑張ったけど直らず。 記事
- PHP-Excelでxls形式で変換して、JODConverterで変換。でもPDF変換後に枠線が太くなる現象をなんとかしたい。
- 枠線を細いままPDFにするためには枠線のタイプを変更すればいいことを発見。でも、PHP-Excelでxls形式で出力すると、デフォルトの枠線に置き換えられてしまう。
- PHP-Excelではxlsx(MS Office2007)形式で出力することにした。
- でもJODConverter2.2.1ではxlsx形式には対応していない。
- JODConverter3.0 + OpenOffice3.0でxlsxに対応しているので、JODConverter3.0のソースをゲットしてMavenでコンパイル。
- ・・・しようとしたけどコンパイルが通らない。記事
- WindowsにEclipseの環境を整えてMavenからEclipseプロジェクトに変換するとコンパイルが通った。 記事
- 実行するとエラーになるので、該当箇所をEclipseでデバッグ。
- ・・・するためにCentOSにデスクトップ環境をインストールして、Eclipseをインストール。記事
長い道のり・・・。でもゴールはもうすぐ・・・のような気がする。
-----
問題となっている箇所を特定できたので、暫定処置。
- OfficeProcess.javaの「nofirststartwizard」オプションを有効に。
- ManagedProcessOfficeManager.javaのcatch後throwしているのをコメントアウト。
おそらくOpenOffice.orgサービスの起動と停止がうまくコントロールできてないみたい(?)。PDF変換は成功するけど、そのあとExceptionとなっていた。
ちなみに実行コマンドは次のような感じ。 環境はLinux(CentOS)。
# java -jar jodconverter.jar -f pdf /tmp/hattyu.xlsx /tmp/hattyu
.pdf
設定が必要なパスは
JAVA_HOME
OFFICE_HOME
だけかな?参考
また、設定したときに確認しておきます。
JODConverterのリリース時には直っていることを期待しつつ・・・。とりあえずゴール。
<2009/01/24 追記>
Google Codeでコンパイル済みのβ版が公開されたのでそっちを導入。
おかげで実行時に失敗していた原因がわかった。
commons-cli.jarなども一緒のディレクトリにいないと駄目らしい。
以下エラーの出力内容。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/CommandLineParser
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.CommandLineParser
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: net.sf.jodconverter.cli.Convert. Program will exit.
<2009/03/09 追記>
JODConverterは機能的には便利だけど、処理時間がかかってしまうのが致命的。TCPDF+FPDIで日本語も問題なく表示できるので、こっちを使った方がいいかも。
参考記事:【PHP】TCPDF 4.5.xxxでFPDI 1.2.1を使えるようにする
もしくはPHP-Excelのバージョンが上がって日本語でもレイアウトが崩れずに表示されるようになるまで我慢する。
参考記事:PHPからエクセルを操作するPHP-Excelを使ってみた