Edited at

SpringMVCとJasperReportsで帳票を印刷してみた 番外編(画像編)

More than 1 year has passed since last update.


帳票に画像をつける。

前回の記事

そのまんまです。ビジネス文書だと規定のハンコに。遊びで使う分なら、ロゴマークとかつけてクールにするといいと思います。


パラメーターとイメージを用意

まずは画像を入れるパラメーターを用意します。

今回は静的ファイルから読み込むのでパラメーターの型をInputStreamにします。(DBからBlob型を読み込む時などはByteArrayInputStream型にするといいらしいです、未実行)

image.png

次に帳票にImageをセットします。

image.png

Expressionにはさっき用意したパラメーターを用意。

イメージのソースはどうするのと聞かれるので「後でJavaから入力する」を選択(うろおぼえ

ここまで出来たらプレビューで試してみてもいいかもしれません。何も表示されないですけど・・・


画像ファイルをJava側で読み込む。

今回はダウンロード形式ではなく、ブラウザに表示してくれる形式で作りましょう。(自分の好み)

MVCの鉄則。コントローラーを書きます。


PainterPrintController.java

@Controller

public class PainterPrintController {

@Autowired
ResourceLoader resource;

@RequestMapping(value = "/paint", method = RequestMethod.GET)
public ModelAndView paintPrint() {
ModelAndView rslt = new ModelAndView("reportPrint");
HashMap<String, Object> data = new HashMap<String, Object>();
InputStream img =null;

//画像を取得
try {
img = new FileInputStream(resource.getResource("picture/aomin.icon.jpg").getFile());

} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}

//Viewにセット
data.put("icon_image", img);
rslt.addObject("jspData", data);

//ビューを返す
return rslt;
}


必要な要素は二つ。

1.画像を読み込む。

2.ハッシュマップをビュー渡す。

これだけです。

帳票をコンパイルしたり出力する処理はJSP側に任せます。

まずJspに以下のコードを書きます。


reportPrint.jsp

<%@ page contentType="application/pdf" %>

<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.data.*" %>
<%@ page import="java.io.*" %>
<%@ page import="org.springframework.core.io.*" %>
<%@ page import="org.springframework.beans.factory.annotation.*" %>
<%@ page import="java.util.*" %>
<%
try{
//GetData And jrxml
HashMap<String, Object> param = (HashMap<String, Object>)request.getAttribute("jspData");
String jrxmlFile = session.getServletContext().getRealPath("/report/paint_print.jrxml");
InputStream input = new FileInputStream(jrxmlFile);

//compile krxml
JasperReport jasperReport = JasperCompileManager.compileReport(input);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource());
JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());

//print pdf on page
response.getOutputStream().flush();
response.getOutputStream().close();

} catch (Exception e){
e.printStackTrace();
}

%>


変わっているところは


reportPrint.jsp

<%@ page contentType="application/pdf" %>


という箇所。ここでPDF出力形式という設定を行います。

他、基本的な帳票の出力の仕方はダウンロード形式でも表示形式でも変わりません。

パラメーターとフィールドのデータ用リストを用意し、

コンパイルし、

アウトプットストリームに出力します。

今回はフィールドがないので、

データの埋め込みの際、new JREmptyDataSource()を使っています。


れっつ実行

それではコントローラーで指定したアドレスにアクセスしてみます。

image.png

キャラクターロゴ入り帳票が印刷できましたね。

ビジネスの場所ではロゴや電子印に使うのがベターな選択だと思います。

みなさんもレッツ自動書類作成。