かくかくしかじかあって小さいサンプル作ったのでメモ。
JavaでExcelをPDFへ変換する必要があったのですが、ライブラリは色々とありそうな中、JODConverterを使ってみました。
JODConverterの3.0なのですが、これ3.0-beta-4でメンテナンスは止まってるっぽいですね。。。微妙。
そして2.0まではMavenのCentralリポジトリにあるのですが、3.0はないようです(-_-;これまた微妙。
もしご利用される方は色々ご検討を;
で、それらを前提に以下の環境で簡単なサンプルを作成。
環境
OS: Windows 7 Professional
IDE:NetBeans7.3
Apache OpenOffice 3.4がインストール済
プロジェクトの作成
とりあえず今回はNetBeans7.3でMavenではなく普通にJavaアプリケーションで作りました。
プロジェクトが生成された後、ライブラリを右クリックして「Jar/フォルダの追加」からダウンロードしたJODConverter.jarを指定します。
その他の参照
必要なライブラリがいくつかあるようで、自分の場合は面倒なので、一旦別のMavenプロジェクト作って以下のpom.xmlを定義して、ビルド、ダウンロードしました;横着。。。
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>ridl</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>3.2.1</version>
</dependency>
で、ダウンロードされたら、元のプロジェクトに戻って、ライブラリで右クリックして「Jar/フォルダの追加」から落とされたjarを指定します。デフォルト設定だと以下にあるかと。
C:\Users\ユーザ名\.m2\repository
簡単なコード
で、サンプルレベルのコードですが、以下のように書いて
package excel2pdfconvert;
import java.io.File;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
public class Excel2PdfConvert {
public static void main(String[] args) {
DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
config.setOfficeHome("C:\\Program Files\\OpenOffice.org 3");
config.setPortNumber(8100);
OfficeManager officeManager = config.buildOfficeManager();
officeManager.start();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
converter.convert(new File("C:\\temp\\Book1.xlsx"), new File("C:\\temp\\Book1.pdf"));
officeManager.stop();
}
}
実行
元のExcelはofficeのサイトから適当に落としてきたテンプレートで以下のようなExcelです。
で、プログラム実行して、生成されたPDFは以下のような感じ。
わりといい感じ!Excelの定義によっては崩れたりもありそうですが、もう少し触ってみよう。