OoPdfOutputStreamExporterの使い方について

1,445 views
Skip to first unread message

sheena

unread,
Oct 7, 2015, 6:51:57 AM10/7/15
to excella
sheenaと申します。
初めての投稿となりますが、よろしくお願いいたします。

現在、WebアプリからのExCella Reportsの使用を検討しているのですが、
OoPdfOutputStreamExporterで、作成したレポートをストリームに出力しようとすると
エラーとなってしまいます。

java.lang.IllegalStateException: officeHome not set and could not be auto-detected

OfficeHomeを設定していないためであると思われるのですが、
OoPdfExporterクラスにはOfficeManagerを渡すコンストラクタがあるのですが、
OoPdfOutputStreamExporterクラスにはそのようなコンストラクタがありません。

どのようにすればPDFをストリームに出力できるか、ご教示いただければと思います。

現在は、OoPdfExporterを使ってテンポラリフォルダにファイルを出力し、
バイト配列に取り込むことでPDFをダウンロードするようにしています。

よろしくお願いいたします。

seki

unread,
Oct 27, 2015, 8:32:15 PM10/27/15
to excella, uue...@gmail.com
関です。

私はPDF出力は使っていませんが、暫く返信がないようですので気になって調べてみました。
それで適当にOpenOfficeをインストールしてOoPdfOutputStreamExporterを実行してみましたところ、
私も同じエラーが発生しました。
そのエラーを調べてみましたら、OoPdfOutputStreamExporterの場合はjodconverterのOfficeUtilsクラスの
getDefaultOfficeHomeメソッドで返される値がofficeHomeとして設定されることが分かりました。

以下、OfficeUtilsクラスの抜粋です。
public class OfficeUtils {


   
public static File getDefaultOfficeHome() {
       
if (System.getProperty("office.home") != null) {
           
return new File(System.getProperty("office.home"));
       
}
       
if (PlatformUtils.isWindows()) {
           
// %ProgramFiles(x86)% on 64-bit machines; %ProgramFiles% on 32-bit ones
           
String programFiles = System.getenv("ProgramFiles(x86)");
           
if (programFiles == null) {
                programFiles
= System.getenv("ProgramFiles");
           
}
           
return findOfficeHome(
                programFiles
+ File.separator + "OpenOffice.org 3",
                programFiles
+ File.separator + "LibreOffice 3"
           
);
       
} else if (PlatformUtils.isMac()) {
           
return findOfficeHome(
               
"/Applications/OpenOffice.org.app/Contents",
               
"/Applications/LibreOffice.app/Contents"
           
);
       
} else {
           
// Linux or other *nix variants
           
return findOfficeHome(
               
"/opt/openoffice.org3",
               
"/opt/libreoffice",
               
"/usr/lib/openoffice",
               
"/usr/lib/libreoffice"
           
);
       
}
   
}

}

その為、OpenOfficeもしくはLibreOfficeを上記の場所にインストールするか、
もしくはoffice.homeシステムプロパティを設定すれば大丈夫だと思います。
私も試しにベタにSystem.setPropertyで設定してみましたら、無事PDFが出力できました。
(Windows7, OpenOffice 4.1.1で確認しました。)

2015年10月7日水曜日 19時51分57秒 UTC+9 sheena:

hssh...@gmail.com

unread,
Oct 28, 2015, 9:08:48 PM10/28/15
to excella, uue...@gmail.com
関様、ご返信いただきありがとうございます。

ご返信いただいた内容の通り、office.homeシステムプロパティを設定することで
OoPdfOutputStreamExporterによるレポートの生成ができました。

OpenOfficeのHOMEディレクトリはサーバの環境変数から取得し、システムプロパティ
に設定するようにしました。

  System.setProperty("office.home", System.getenv("OFFICEHOME"));

これで余計なファイルI/O処理を消すことができます。
大変助かりました。
ご教示いただき、ありがとうございました。


2015年10月28日水曜日 9時32分15秒 UTC+9 seki:

神園和秀

unread,
Oct 29, 2015, 10:16:23 PM10/29/15
to excella, uue...@gmail.com
神園です。

OoPdfOutputStreamExporterは私も使用したことがなかったので、試してみようとは思っていたのですが、
本来の仕事の方が忙しかったため、手が付いておりませんでした。

関様、ご確認ありがとうございました。

2015年10月7日水曜日 19時51分57秒 UTC+9 sheena:
Reply all
Reply to author
Forward
0 new messages