🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JasperReports

JasperReportsはオープンソースの帳票生成ツールです。JasperReportはPDF, HTML, Microsoft Excel, ODT, XML等の様々なフォーマットのものをエクスポートします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

3249閲覧

jspからJavaファイルを呼出し、PDF作成をするには

kumakumatan

総合スコア213

JasperReports

JasperReportsはオープンソースの帳票生成ツールです。JasperReportはPDF, HTML, Microsoft Excel, ODT, XML等の様々なフォーマットのものをエクスポートします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/10/18 07:38

編集2019/10/19 01:25

jasperreports-6.0.0
Tomcat8
Java8

JSP側
test1.jsp

jsp

1import="model.CommodityPrice" 2import="model.test1" 345 6//test1クラスの実行 7test1 test1= new test1(); 8test1.pdftest();

Java側
test1.java

java

1package model; 2 3import model.CommodityPrice; 4 5import java.io.File; 6 7import java.text.SimpleDateFormat; 8import java.util.ArrayList; 9import java.util.Date; 10import java.util.HashMap; 11import java.util.List; 12import java.util.Map; 13 14import net.sf.jasperreports.engine.JasperCompileManager; 15import net.sf.jasperreports.engine.JasperExportManager; 16import net.sf.jasperreports.engine.JasperFillManager; 17import net.sf.jasperreports.engine.JasperPrint; 18import net.sf.jasperreports.engine.JasperReport; 19import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 20 21public class test1 { 22 23 24 //public static void main(String[] args) { 25 public void pdftest() { 26 System.out.println("Java実行されています"); 27 // TODO 自動生成されたメソッド・スタブ 28 try { 29 String dir = new File(".").getAbsoluteFile().getParent(); 30 String dir2 = dir + "\webapps\TEST\page\JasperSample2.jrxml"; 31 System.out.println("現在のディレクトリ"+dir2); 32 33 File jrxmlFile = new File(dir2); 34 if(jrxmlFile.exists()){ 35 36 //埋め込みデータ作成(画面から取得した体で、手動で設定する。) 37 CommodityPrice adapter1 = new CommodityPrice(); 38 CommodityPrice adapter2 = new CommodityPrice(); 39 CommodityPrice adapter3 = new CommodityPrice(); 40 CommodityPrice adapter4 = new CommodityPrice(); 41 CommodityPrice adapter5 = new CommodityPrice(); 42 43 adapter1.setName("バナナ"); 44 adapter2.setName("メロン"); 45 adapter3.setName("みかん"); 46 adapter4.setName("いちご"); 47 adapter5.setName("ケーキ"); 48 49 50 51 adapter1.setPrice("100円"); 52 adapter2.setPrice("100円"); 53 adapter3.setPrice("100円"); 54 adapter4.setPrice("330円"); 55 adapter5.setPrice("530円"); 56 57 List<CommodityPrice> adapterList = new ArrayList<CommodityPrice>(); 58 59 adapterList.add(adapter1); 60 adapterList.add(adapter2); 61 adapterList.add(adapter3); 62 adapterList.add(adapter4); 63 adapterList.add(adapter5); 64 65 66 JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(adapterList); 67 68 //パラメータ設定用 69 Map<String,Object> params = new HashMap<String,Object>(); 70 71 72 // 日付形式のフォーマット 73 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 74 // フォーマットに合わせた文字列を出力 75 String yyyymmdd = sdf.format(new Date()); // 2016年12月05日 76 params.put("datetime", yyyymmdd); 77 78 79 // (1)テンプレートXMLのコンパイル 80 JasperReport jasperReport = JasperCompileManager 81 .compileReport(dir2); 82 83 // データソースとパラメータをコンパイルされた帳票に設定 84 JasperPrint pdf = JasperFillManager.fillReport(jasperReport, params,ds); 85 86 // 出力用のパス・ファイル名を指定する 87 File path = new File("C:\テスト1.pdf"); 88 89 // 帳票の出力 90 JasperExportManager.exportReportToPdfFile(pdf, path.getAbsolutePath()); 91 92 }else{ 93 System.out.println("jrxmlファイルが見つかりませんでした。"); 94 } 95 96 } catch (Exception e) { 97 e.printStackTrace(); 98 } 99 } 100}

java

1package model; 2 3public class CommodityPrice { 4 5 //「商品名」を保持するフィールド 6 private String name; 7 8 //「商品価格」を保持するフィールド 9 private String price; 10 11 //以下各フィールドのgetter/setter 12 public String getName() { 13 return name; 14 } 15 16 public void setName(String name) { 17 this.name = name; 18 } 19 20 public String getPrice() { 21 return price; 22 } 23 24 public void setPrice(String price) { 25 this.price = price; 26 } 27 28} 29

test1.javaを単体で動かすと、「Cドライブ」にテスト1.pdfが作成されるのですが、
test1.jspからインスタンスを生成して実行すると、PDFが作成されません。

どのようにしたらjspからjavaクラスを実行して、PDFを生成できるようになりますでしょうか?

jspからjavaを実行した際、読み込みファイル(jrxmlファイル)は読めています。
tomcat8-stdout.yyyy-mm-dd.logには

log

1Java実行されています 2現在のディレクトリC:...\page\JasperSample2.jrxml 3[WARN ] - Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/components (ComponentsEnvironment.java:126) 4[WARN ] - Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/parts (PartComponentsEnvironment.java:117) 5[WARN ] - Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/components (ComponentsEnvironment.java:126) 6[WARN ] - Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/components (ComponentsEnvironment.java:126) 7[WARN ] - Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/parts (PartComponentsEnvironment.java:117)

と記載され、test1.javaは読み込めています。
Jasperreportsの箇所でWARNは出ていますが、特にエラーはありません。

ちなみに、Tomcatは「C:\web\tomcat\」にインストールしています。

どなたかご教授を宜しくお願いします。

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

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

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

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

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

tetutetu

2019/10/18 08:46

これだけでは回答者側に何故エラーが起きているのかが分かりません。 何のエラーが出ているかを追記してください。 とりあえず現状言えることは jsp側でtest1をimportしているか確認してみてください。 ぐらいです
tetutetu

2019/10/18 08:48

後test1.javaのimport文が重複しているので(投稿時のミスだと解釈しました) 紛らわしいので修正した方がいいと思います。
kumakumatan

2019/10/19 01:25

ご回答ありがとうございます。 記述を修正してみました。 宜しくお願いします。
A-pZ

2019/10/21 14:51

test1.jspからインスタンスを生成して実行すると、PDFが作成されません とありますが、それはブラウザないしはなんらかのWebクライアントから実行し、実行結果は表示されているのでしょうか?
kumakumatan

2019/10/23 01:56

ご回答ありがとうございます。 jspからJavaのインスタンスを生成して、 ローカルディスクのDドライブなどに、PDFを作成して、 それをブラウザに表示させようとしましたが、ローカルディスクにも ブラウザにも生成されませんでした。 Java単体で実行すると、ローカルディスクにPDFは生成されます。
guest

回答1

0

自己解決

最初試みたところ
jspからJavaのインスタンスを生成して、
ローカルディスクのDドライブなどに、PDFを作成して、
それをブラウザに表示させようとしましたが、ローカルディスクにも
ブラウザにも生成されませんでした。
Java単体で実行すると、ローカルディスクにPDFは生成されます。

いろいろ調べていき、jsp側で「jrxml」ファイルをコンパイルして
ブラウザにPDF出力させるようにしました。

<%@ page import="net.sf.jasperreports.engine.*" import="java.util.ArrayList" import="java.util.HashMap" import="java.util.List" import="java.util.Map" ・ ・ ・ ・ %> <%@ page language="java" contentType="application/pdf; charset=UTF-8" pageEncoding="UTF-8"%> <% //文字コード[UTF-8] request.setCharacterEncoding("UTF-8"); try{ //テンプレートXMLファイルのパス String path = new File(".").getAbsoluteFile().getParent(); String jrxmlFile = path + "/webapps/........./JasperSample.jrxml"; //埋め込みデータ作成(画面から取得した体で、手動で設定する。) CommodityPrice adapter1 = new CommodityPrice(); CommodityPrice adapter2 = new CommodityPrice(); CommodityPrice adapter3 = new CommodityPrice(); CommodityPrice adapter4 = new CommodityPrice(); CommodityPrice adapter5 = new CommodityPrice(); adapter1.setName("じゃがいも"); adapter2.setName("人参"); adapter3.setName("たまねぎ"); adapter4.setName("豚バラ"); adapter5.setName("カレー粉"); adapter1.setPrice("¥38"); adapter2.setPrice("68円"); adapter3.setPrice("100円"); adapter4.setPrice("330円"); adapter5.setPrice("98円"); List<CommodityPrice> adapterList = new ArrayList<CommodityPrice>(); adapterList.add(adapter1); adapterList.add(adapter2); adapterList.add(adapter3); adapterList.add(adapter4); adapterList.add(adapter5); JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(adapterList); //GetData And jrxml Map<String,Object> params = new HashMap<String,Object>(); InputStream input = new FileInputStream(jrxmlFile); //日付形式のフォーマット SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //フォーマットに合わせた文字列を出力 String yyyymmdd = sdf.format(new Date()); // 2019年10月23日 params.put("datetime", yyyymmdd); //コンパイル JasperReport jasperReport = JasperCompileManager.compileReport(input); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,params, ds); JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream()); //PDF表示 response.getOutputStream().flush(); response.getOutputStream().close(); } catch (Exception e){ e.printStackTrace(); } %>

投稿2019/10/23 01:58

kumakumatan

総合スコア213

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問