【Java】エクセルをPDFに変換してブラウザ表示する

こんにちは、竹石です。

ファイルをサーバにアップロードして管理するシステムで、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();
	}

}

■index.jsp
jsp

あとはブラウザを開いて、サンプルデータ.xlsxをアップロードして、
PDF表示ボタンを押すとpdfに変換されたExcelが見れます。
ちなみに、複数シートあるExcelの場合は1つのPDFに連結されて表示されます。

2014-07-03_113903 pdf

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

コメントを残す

メールアドレスが公開されることはありません。

ABOUTこの記事をかいた人

WEBアプリ開発をメイン業務としている。後輩エンジニアの育成リーダーとしても活躍中。社内勉強会の立ち上げなど、会社の前線でその能力を発揮している。2009年、株式会社ヘッドウォータース新卒入社。