こんにちは、竹石です。
ファイルをサーバにアップロードして管理するシステムで、Excelファイルがアップロードされるとブラウザ上で内容を確認できないですよね。
ファイルをダウンロードして、Officeを開いてとなるととっても面倒です。
画像やPDFならlightbox、funcyboxなどのJavaScriptのライブラリでブラウザ上で表示できるのに。。。
そこで今回は
JavaでExcelをPDFに変換して、ブラウザ上で確認する方法
を紹介します!
調べるとiTextというライブラリとOpenOfficeのコンバーター機能を使う方法があるようです。Javaのライブラリで完結するiTextでPDFを作成してから、気付きました。
これExcelの文言とか読み込めるけど、書式とかを保つにはPOIとか使わなきゃだめ・・?Excelの書式とかそのままPDFに変換できないの?
ということで、OpenOfficeの機能を使うことにしました。
①jodconverterというライブラリをダウンロードします。
https://code.google.com/p/jodconverter/downloads/list
②libの中のjodconverter-core-3.0-beta-4.jarを
/SampleOfficePdf/src/main/webapp/WEB-INF/libに配置して、ビルドパスに追加します。
③OpenOfficeを任意のパスにインストール
http://www.openoffice.org/ja/download/
④アップロードファイルを置く任意のディレクトリを作成
webapp/pdfとか
⑤下記のようなコードを書く。
■IndexAction
package jp.co.sample.action; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletContext; import org.apache.struts.upload.FormFile; import org.artofsolving.jodconverter.OfficeDocumentConverter; import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeManager; import org.seasar.framework.exception.IORuntimeException; import org.seasar.struts.annotation.Execute; public class IndexAction { /** アップロードファイル */ public FormFile uploadFile; /** PDF存在チェック */ public boolean pdfFile; public ServletContext application; @Execute(validator = false) public String index() { File dispFile = new File(application.getRealPath("/pdf/") + "/disp.pdf"); pdfFile = dispFile.exists(); return "index.jsp"; } @Execute(validator = false) public String upload() { DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration(); // 任意のパスを指定 config.setOfficeHome("C:\\Program Files\\OpenOffice 4"); config.setPortNumber(8100); OfficeManager officeManager = config.buildOfficeManager(); officeManager.start(); // webapp/pdf配下にファイルを配置 String root = application.getRealPath("/pdf/"); try { OutputStream out = new BufferedOutputStream(new FileOutputStream( root + "/" + uploadFile.getFileName())); try { out.write(uploadFile.getFileData(), 0, uploadFile.getFileSize()); } finally { out.close(); } } catch (IOException e) { throw new IORuntimeException(e); } OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); converter.convert(new File(root + "/" + uploadFile.getFileName()), new File(root + "/disp.pdf")); officeManager.stop(); return index(); } }
あとはブラウザを開いて、サンプルデータ.xlsxをアップロードして、
PDF表示ボタンを押すとpdfに変換されたExcelが見れます。
ちなみに、複数シートあるExcelの場合は1つのPDFに連結されて表示されます。


JavaScriptでExcelとかそのまま見れるライブラリがあったら最高なんですけどね!!
コメントを残す