質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

1960閲覧

jodconverterにて、NoClassDefFountErrorが発生いたします。

a0841_1974

総合スコア29

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/07/13 09:47

編集2018/07/19 09:22

いつもお世話になっております。

以下の環境で、
xlsxファイルをPDF変換したい処理があります。

LocalOfficeManager.make();のところで、
java.lang.NoClassDefFountErrorが発生してしまいます。

解決方法が分かりませんので、
ご存知の方がいらっしゃれば教えて頂けますでしょうか。

【環境】
Windows7
Eclipse4.7
Java8
Tomcat8
struts

※xlsxファイルの作成は問題なくできております。
jodconverterには、jodconverter-local-4.2.0.jar、jodconverter-core-4.2.01.jarを
使用しております。

public static void writeResponse(DispatchContext context, XLSXTemplateHolder holder) throws ApplicationException, IOException { try{ // XLSXファイルの生成に成功したのでHTTPのへッダを追加する HttpServletResponse response = context.getResponse(); StringBuffer disposition = new StringBuffer(256); disposition.append(CONTENT_DISPOSITION); disposition.append(PREFIX); disposition.append("list.pdf"); // disposition.append(holder.getFilename()); // disposition.append(SUFFIX); // 初期化パラメータに設定されたエンコーディングをデフォルトと扱う ActionServlet servlet = context.getServlet(); String encoding = servlet.getInitParameter("csv.encoding"); if ((encoding == null) && (servlet instanceof MultibyteActionServlet)) { // リクエストに設定済みのエンコーディングを使用する MultibyteActionServlet multibyte = (MultibyteActionServlet)servlet; encoding = multibyte.getRequestEncoding(context.getRequest()); } // バッファ内にxlsxファイルの内容を書き出す ByteArrayOutputStream buff = new ByteArrayOutputStream(); // PDF変換時に渡すInputStreamを用意 ByteArrayInputStream in=null; try { // バッファ内xlsxのデータを書き出し holder.getWb().write(buff); // PDF変換時に渡すInputStreamデータを作成 in = new ByteArrayInputStream(buff.toByteArray()); // PDFの出力先を開く // FileOutputStream out=null; BufferedOutputStream out=null; try{ // ContentTypeの設定 response.setContentType(CONTENT_TYPE); response.setHeader("Content-Disposition", disposition.toString()); out = new BufferedOutputStream(response.getOutputStream()); // LibreOfficeを管理するクラス生成 OfficeManager officeManager = LocalOfficeManager.make(); // conveterを管理するクラス生成 DocumentConverter converter = LocalConverter.make(officeManager); DocumentFormatRegistry registry = converter.getFormatRegistry(); DocumentFormat xlsxFormat = registry.getFormatByExtension("xlsx"); DocumentFormat pdfFormat = registry.getFormatByExtension("pdf"); try{ // LibreOfficeの起動 officeManager.start(); // xlsx -> PDF変換 converter.convert(in).as(xlsxFormat).to(out).as(pdfFormat).execute(); }catch(OfficeException e){ e.printStackTrace(); } finally { try{ // LibreOfficeの終了 officeManager.stop(); }catch(OfficeException e){ e.printStackTrace(); } } } catch (FileNotFoundException fnfe) { throw new RuntimeException(fnfe);//開けない場合はここでアウト } finally { if(null != out){ try { out.flush(); out.close(); } catch (IOException ioe) { // ignore ioe.printStackTrace(); } } } } catch (IOException ioe) { throw new RuntimeException(ioe); } finally { if(in != null){ try { in.close(); } catch (IOException ioe) { // ignore ioe.printStackTrace(); } } try { buff.close(); // OpenOfficeから切断 } catch (IOException e) { // ignore e.printStackTrace(); } } } finally { if (holder.getWb() != null) { ((SXSSFWorkbook) holder.getWb()).dispose(); } } }
public class XLSXTemplateHolder implements Serializable { /** XLSXのファイル名です。 */ private String filename = "data.xlsx"; /** XLSXのデータです。 */ private Workbook wb; public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public Workbook getWb() { return wb; } public void setWb(Workbook wb) { this.wb = wb; }

(追加)
スタックトレースを追加いたします。
※入力文字の関係上、追加部分のエラー内容は一部削除しております。

java.lang.NoClassDefFoundError: Could not initialize class org.jodconverter.office.LocalOfficeManager at apri1.xlsx.XLSXTemplatePdfForm.writeResponse(XLSXTemplatePdfForm.java:109) at apri1.xlsx.XLSXTemplatePdfForm.perform(XLSXTemplatePdfForm.java:59) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1787)

(追加2)
slf4j-api-1.7.25.jar、slf4j-log4j12-1.7.25.jar、slf4j-simple-1.7.25.jarを追加して実行しましたら、エラー内容が変わりましたので、ご連絡いたします。

java.lang.NoClassDefFoundError: Could not initialize class org.jodconverter.office.LocalOfficeUtils$DefaultOfficeHomeHolder at org.jodconverter.office.LocalOfficeUtils.getDefaultOfficeHome(LocalOfficeUtils.java:189) at org.jodconverter.office.LocalOfficeManager$Builder.build(LocalOfficeManager.java:124) at org.jodconverter.office.LocalOfficeManager.make(LocalOfficeManager.java:55) at apri1.xlsx.XLSXTemplatePdfForm.writeResponse(XLSXTemplatePdfForm.java:109) at apri1.xlsx.XLSXTemplatePdfForm.perform(XLSXTemplatePdfForm.java:59) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1787) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1586) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unz.hori

2018/07/18 08:49

スタックトレースを質問に追記してください
a0841_1974

2018/07/18 08:58

ご連絡ありがとうございます。スタックとレースを出力するようにしますので、お待ち頂けますでしょうか。
a0841_1974

2018/07/18 09:51

スタックとレース情報を追加しましたので、ご連絡いたします。よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/07/18 11:30

コンパイル時にCLASSPATH上にあればいいというわけではない
unz.hori

2018/07/19 02:07

実行はどうやってますか?EclipseでTomcat起動して確認しているんでしょうか?
unz.hori

2018/07/19 02:12

感じとしてはhttps://groups.google.com/forum/#!topic/excella/qDTt4adakV8の内容が近い感じがしますが...
a0841_1974

2018/07/19 04:47

実行はTomcatプラグインをインストールして実施しております。Eclipseの上段にtomcatのマークがありますので、そのマークから実行しております。 また、Tomcatの開発用クラスローダーのクラスパスとして、jodconverter-core-4.2.01.jar、jodconverter-local-4.2.0.jarが入っております。
unz.hori

2018/07/19 04:54

WEB-INF/libにjodconverter-local-4.2.0.jarを配置して実行するとどうなりますか?
a0841_1974

2018/07/19 08:53

ご連絡ありがとうございます。WEB-INF/lib配下にjarを置いて実行しましたが、同じエラーが発生しました。
a0841_1974

2018/07/19 08:57

jodconverter4を調べていたら、slf4jが入っていないと、SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".と出力されると記述されておりました。現状のログにはこのエラーが出力されていないのですが、試しにslf4jのjarも追加してみます。
unz.hori

2018/07/19 08:58

スタックトレースってこれで全部でしょうか?一部なら全部のせてください
a0841_1974

2018/07/19 08:59

これで全部になります。
a0841_1974

2018/07/19 09:13

slf4jのjarを追加して実行したところ、エラーが変わりましたのでご連絡いたします。質問に追加いたします。
a0841_1974

2018/07/19 09:21

はい。Libre Officeをインストール済です。
a0841_1974

2018/07/19 10:08

試しにjodconverter-core-3.0-beta-4で実施したところ、問題なく動きました。jconverter4は出来そうにないのであきらめます。ありがとございました。
退会済みユーザー

退会済みユーザー

2018/07/19 10:58

やり取りしてる方々へ このてのエラーは間接ライブラリが不足してることが多い
a0841_1974

2018/07/19 11:41

ご連絡ありがとうございます。色々調査しましたが、おっしゃる通りだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問