JasperReport+サーブレットWebアプリケーション:印刷
JasperReportのプロフィールについてはgoogleで調べることができますが、ここでは紹介しません.
私の開発環境:MyEclipse 5.5 GA+iReport-nb-3.5.2.使用するJasperReportバージョンもjasperreports-3.5.2
必要なjarは以下のlib 1,lib 2から得ることができ、すべてのjarパケットはiTextAsianを除く.JAr以外はjasperreports-3.5.2から見つけることができます!
JasperReportはiReportと一緒に使用して開発するのが便利ですが、中国語の表示の問題に注意し、テンプレートを設計する際には以下の3点に注意してください.
Font name:宋体(中国語フォント)PDF font name:STSong-LightPDF Encoding:UniGB-UCS 2-H(Chinese Siplified)PDF Embed:√
アプリケーションにiTextAsianを追加します.jar
ステップ1:iReportでJasperReportテンプレートを設計し、コンパイルします.結果は2つのファイルがあります:preson.jrxml(テンプレートファイル)、preson.JAsper(コンパイルファイル).WebRootの下に新しいフォルダjasperを作成し、この2つのファイルをフォルダに配置します.
ステップ2:エンティティBeanを構築する
ステップ3:サービスの構築
ステップ4:JRDataSourceの構築
ステップ5:サーブレットの構築
web.xmlで構成されているservletは次のとおりです.
ステップ6:Web印刷はapplet形式に基づいているため、印刷するappletを作成する必要があります.
ヒント:WebRootの下に新しいappletフォルダが必要です.jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.JAr 3つのパッケージを追加し、上のJRPrinterAppletでコンパイルしたファイルも入れます.
(appletはパッケージ名を付けないほうがいいです.パッケージ名を付けてパッケージ名のようなフォルダパスを作成し、appletをコンパイルしたファイルを入れてappletと同じディレクトリに置くと、古い新聞がこのクラスを見つけます)
public final void setStub(AppletStub stub)
このページのURLはservletのパスでなければなりません.
実は上のすべてのものはjasperReprotが自分で持っているdemoから見つけることができます.
jasperreports-3.5.2-projectjasperreports-3.5.2demosampleswebappにwebアプリケーションの例があります.
印刷は機械にjre-1を押す必要があります.5_0_18-windows-i586-p.exe
私の開発環境:MyEclipse 5.5 GA+iReport-nb-3.5.2.使用するJasperReportバージョンもjasperreports-3.5.2
必要なjarは以下のlib 1,lib 2から得ることができ、すべてのjarパケットはiTextAsianを除く.JAr以外はjasperreports-3.5.2から見つけることができます!
JasperReportはiReportと一緒に使用して開発するのが便利ですが、中国語の表示の問題に注意し、テンプレートを設計する際には以下の3点に注意してください.
Font name:宋体(中国語フォント)PDF font name:STSong-LightPDF Encoding:UniGB-UCS 2-H(Chinese Siplified)PDF Embed:√
アプリケーションにiTextAsianを追加します.jar
ステップ1:iReportでJasperReportテンプレートを設計し、コンパイルします.結果は2つのファイルがあります:preson.jrxml(テンプレートファイル)、preson.JAsper(コンパイルファイル).WebRootの下に新しいフォルダjasperを作成し、この2つのファイルをフォルダに配置します.
ステップ2:エンティティBeanを構築する
public class Person {
private String person_Id;
private String person_name;
private String person_age;
private String person_address;
public Person() {
}
public Person(String id, String name, String age, String address) {
this.person_Id = id;
this.person_name = name;
this.person_age = age;
this.person_address = address;
}
//get,set
}
ステップ3:サービスの構築
public class PersonService {
public List<Person> getAllPerson() {
List<Person> perList = new ArrayList<Person>();
perList.add(new Person("101", " ", "22", " "));
perList.add(new Person("102", " ", "21", " "));
perList.add(new Person("103", " ", "23", " "));
perList.add(new Person("104", " ", "22", " "));
return perList;
}
}
ステップ4:JRDataSourceの構築
package com.mengya.JRDataSource;
import java.util.List;
import com.mengya.bean.Person;
import com.mengya.service.PersonService;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
/**
* JaserperReort
*
* @author
*
*/
public class PersonDataSource implements JRDataSource {
private int index = -1;
private List<Person> personList = new PersonService().getAllPerson();
public Object getFieldValue(JRField field) throws JRException {
Object value = null;
String fieldName = field.getName();
if ("person_Id".equals(fieldName)) {
value = personList.get(index).getPerson_Id();
} else if ("person_name".equals(fieldName)) {
value = personList.get(index).getPerson_name();
} else if ("person_age".equals(fieldName)) {
value = personList.get(index).getPerson_age();
} else if ("person_address".equals(fieldName)) {
value = personList.get(index).getPerson_address();
}
return value;
}
public boolean next() throws JRException {
index++;
return index < personList.size();
}
}
ステップ5:サーブレットの構築
public class JRPrintServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = this.getServletConfig().getServletContext();
File reportFile = new File(context.getRealPath("/jasper/preson.jasper"));
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("year", "2009");
parameters.put("unit_mc", " XX ");
JasperPrint jasperPrint = null;
try {
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());
jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, new PersonDataSource());
} catch (JRException e) {
e.printStackTrace();
}
if (jasperPrint != null) {
response.setContentType("application/octet-stream");
ServletOutputStream ouputStream = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jasperPrint);
oos.flush();
oos.close();
ouputStream.flush();
ouputStream.close();
}
}
}
web.xmlで構成されているservletは次のとおりです.
<servlet>
<servlet-name>JRPrintServlet</servlet-name>
<servlet-class>com.mengya.servlet.JRPrintServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JRPrintServlet</servlet-name>
<url-pattern>/JRPrintServlet</url-pattern>
</servlet-mapping>
ステップ6:Web印刷はapplet形式に基づいているため、印刷するappletを作成する必要があります.
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.util.JRLoader;
public class JRPrinterApplet extends javax.swing.JApplet {
private URL url = null;
public void init() {
String strUrl = getParameter("REPORT_URL");
if (strUrl != null) {
try {
url = new URL(getCodeBase(), strUrl);// html URL
// System.out.println("url=" + url.toURI());// servlet
} catch (Exception e) {
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
}
} else {
JOptionPane.showMessageDialog(this, "Source URL not specified");
}
}
public void start() {
if (url != null) {
try {
Object obj = JRLoader.loadObject(url);// , JasperPrint
JasperPrintManager.printReport((JasperPrint) obj, true);// JasperPrint
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
ヒント:WebRootの下に新しいappletフォルダが必要です.jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.JAr 3つのパッケージを追加し、上のJRPrinterAppletでコンパイルしたファイルも入れます.
(appletはパッケージ名を付けないほうがいいです.パッケージ名を付けてパッケージ名のようなフォルダパスを作成し、appletをコンパイルしたファイルを入れてappletと同じディレクトリに置くと、古い新聞がこのクラスを見つけます)
public final void setStub(AppletStub stub)
// Applet stub.stub Java C , 。
public boolean isActive();// Applet 。
public URL getDocumentBase();// Applet 。
public URL getCodeBase();// Applet URL 。
public String getParameter(String name);// Applet name 。
public AppletContext getAppletContext();// 。
public void resize(int width,int height);// Applet 。
public void resize(Dimension d);// Applet 。
public void showStatus(String msg);// 。
public Image getImage(URL url); // url 。
public Image getImage(URL url,String name);// url 。
public AudioClip getAudioClip(URL url);// url 。
public AudioClip getAudioClip(URL url, String name);// url 。
public String getAppletInfo();// Applet 、 ;
public String[][] getParameterInfo();
// Applet , : 、 。
public void play(URL url);// url 。
public void destroy();// Applet 。 Applet , Applet 。
* CODE
CODE Applet ;WIDTH HEIGHT Applet 。 APPLET 。
* CODEBASE
CODEBASE Applet URL 。Applet URL, , www.sun.com。 HTML , /AppletPath/Name。 HTML CODEBASE , HTML URL。
* ALT
Java WWW , 。 Java Applet, APPLET ALT 。
* ALIGN
ALIGN Applet HTML 。 HTML<LMG> ,ALIGN TOP、MIDDLE BOTTOM。
* VSPACE HSPACE
VSPACE HSPACE Applet , 。 Applet 50 , 25 :
* NAME
NAME Applet 。 Applet , Applet 。 NAME ,Applet 。
* PARAM
。 Applet 。 HTML Applet 。
Applet。 Applet , Applet HTML 。 , , Java Applet , HTML 。
PARAM HTML , :
PARAM Name="name" Value="Liter"
Java Applet getParameter HTML 。
手順7:印刷ページを作成します.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title> </title>
</head>
<script language="javascript">
<!--
function openApp()
{
var url = "../JRPrintServlet";
document.write('<APPLET ID="JrPrt" CODE = "JRPrinterApplet.class" CODEBASE = "applets" ARCHIVE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar" WIDTH = "0" HEIGHT = "0">');
document.write('<PARAM NAME = "type" VALUE="application/x-java-applet;version=1.2.2">');
document.write('<PARAM NAME = "scriptable" VALUE="false">');
document.write('<PARAM NAME = "REPORT_URL" VALUE ="'+url+'">');
document.write('</APPLET>');
}
-->
</script>
<body bgcolor="#FFFFFF">
<input type="button" value=" " onclick="openApp();">
<!-- js -->
<!--
<APPLET CODE="JRPrinterApplet.class" CODEBASE = "applets"
ARCHIVE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar"
WIDTH="300" HEIGHT="40">
</XMP>
<PARAM NAME=CODE VALUE="JRPrinterApplet.class">
<PARAM NAME = ARCHIVE VALUE = "jasperreports-3.5.2-applet.jar,commons-logging-1.0.2.jar,commons-collections-2.1.jar" >
<PARAM NAME="type" VALUE="application/x-java-applet;version=1.2.2">
<PARAM NAME="scriptable" VALUE="false">
<PARAM NAME="REPORT_URL" VALUE="../JRPrintServlet">
</APPLET>
-->
</body>
</html>
このページのURLはservletのパスでなければなりません.
実は上のすべてのものはjasperReprotが自分で持っているdemoから見つけることができます.
jasperreports-3.5.2-projectjasperreports-3.5.2demosampleswebappにwebアプリケーションの例があります.
印刷は機械にjre-1を押す必要があります.5_0_18-windows-i586-p.exe