BRの中でImageParamPaserを使用したい

114 views
Skip to first unread message

tamaz...@gmail.com

unread,
Mar 6, 2019, 12:33:44 AM3/6/19
to excella
初めて投稿させていただきます。

[ファイル名(フルパス)、テキスト1、テキスト2] のような内容のデータをExcellaに渡し、1シートの中に複数のレコードを出力したいです。

$BR[]{データ, fromCel=1:0, toCell=3:0}
  $I[]{ファイル名}
  ${テキスト1}
  ${テキスト2}

上記のようなテンプレートを用意し、java側では

outputSheet.addParam(BlockRowRepeatParamParser.DEFAULT_TAG, "データ", データ.toArray());

としても、ファイル名の画像はNullとなり、表示されませんでした。

そもそも、このような使い方はできないのでしょうか。


複数レコードだとうまくいかないのかと思い、上記データを1件のみ使用し、java側で

outputSheet.addParam(ImageParamParser.DEFAULT_TAG, "ファイル名", ファイル名);
outputSheet.addParam(SingleParamParser.DEFAULT_TAG, (String) "テキスト1", テキスト1);

と記述、テンプレート側では

  $I[]{ファイル名}
  ${テキスト1}

としてみましたが、「テキスト1」の内容は表示されるものの、やはりファイル名の画像は表示されませんでした。

ImageParamParserの使い方について、なにかご教示いただけませんでしょうか。




丸山貴之

unread,
Mar 8, 2019, 10:10:37 PM3/8/19
to excella
丸山です。

ImageParamParserの使い方について、2点ご確認ください。

1. テンプレートに指定するタグは `$I{}` です(`[]`は不要)。
2. ReportSheet#addParamの第3引数には、画像ファイルのパスを指定してください。
アプリケージョン外のファイルなら、普通にパスを指定すればOK("C:\\path\\to\\image\\file.png"みたいな)
画像ファイルがクラスパス上のリソースなら、サンプルコードの記載を参考にしてください。

tamaz...@gmail.com

unread,
Mar 11, 2019, 1:48:00 AM3/11/19
to excella
丸山様

ご教示ありがとうございます。

1. こちらに転記する際に誤って"[]"を入力してしまったようです。
 実際のテンプレートには「$I{ファイル名}」と入力しています。
2. 第3引数には画像ファイルのフルパスを指定しています。
 ネットワーク上に保存されたファイルなので、
http://999.999.99.999/data/0001_画像/sample.jpg」のようなパス指定をしております。

丸山貴之

unread,
Mar 11, 2019, 11:46:21 PM3/11/19
to excella
2. 第3引数には画像ファイルのフルパスを指定しています。
 ネットワーク上に保存されたファイルなので、
http://999.999.99.999/data/0001_画像/sample.jpg」のようなパス指定をしております。

ファイルパスは、ローカルファイルシステム上のパスを指定する必要があります。
ファイルをダウンロードして一時ファイルに書き出す処理を別途実装して、その一時ファイルを指定すれば良いと思います。

tamaz...@gmail.com

unread,
Mar 12, 2019, 3:02:25 AM3/12/19
to excella
丸山様

 ご回答ありがとうございます。

 一時的にC:\\Temp のフォルダに画像ファイルを配置し、

outputSheet.addParam(ImageParamParser.DEFAULT_TAG, "ファイル名", "C:\\Temp\\sample.jpg");

のように記述、実行してみたところ、下記のエラーとなりました。

-----
java.lang.NoClassDefFoundError: org/apache/commons/codec/digest/DigestUtils
org.apache.poi.hssf.usermodel.HSSFWorkbook.addPicture(HSSFWorkbook.java:1575)
org.bbreak.excella.reports.tag.ImageParamParser.replaceImageValue(ImageParamParser.java:313)
org.bbreak.excella.reports.tag.ImageParamParser.parse(ImageParamParser.java:196)
org.bbreak.excella.reports.tag.ImageParamParser.parse(ImageParamParser.java:67)
org.bbreak.excella.core.SheetParser.parseCell(SheetParser.java:134)
org.bbreak.excella.core.SheetParser.parseSheet(SheetParser.java:104)
org.bbreak.excella.core.BookController.parseSheet(BookController.java:251)
org.bbreak.excella.reports.processor.ReportProcessor.processBook(ReportProcessor.java:182)
org.bbreak.excella.reports.processor.ReportProcessor.process(ReportProcessor.java:110)
site.logic.ReportExcelManager.makeReport(ReportExcelManager.java:95)
site.action.SiteInputServlet.processRequest(SiteInputServlet.java:221)
site.action.SiteInputServlet.doPost(SiteInputServlet.java:346)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
----- 

環境設定等、足りない部分のあるのでしょうか..

丸山貴之

unread,
Mar 12, 2019, 8:09:05 AM3/12/19
to excella
java.lang.NoClassDefFoundError: org/apache/commons/codec/digest/DigestUtils
org.apache.poi.hssf.usermodel.HSSFWorkbook.addPicture(HSSFWorkbook.java:1575)

POIが依存するcommons-codecが不足しているようです。
Maven等の構成管理ツールを使っていれば問題無いかと思いますが、必要なライブラリをクラスパスに追加して下さい。
(Webアプリケーションのようなので、WEB-INF/libに追加)

tamaz...@gmail.com

unread,
Mar 13, 2019, 2:52:15 AM3/13/19
to excella
丸山様

commons-codec と、その他のライブラリを追加したところ、画像が挿入されるようになりました。 
また、表題のBRの中でImageParamParserを使用する件についても、解決することができました。

いろいろとご教示いただきましてありがとうございました。
Reply all
Reply to author
Forward
0 new messages