いつもお世話になっております。
以下の環境で、
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)
あなたの回答
tips
プレビュー