jasperreport 를 사용하기 위해서 .jar파일을 다운받아서 lib 폴더에 추가 하여야한다.
http://sourceforge.net/projects/jasperreports 사이트에서 다운받을수 있다.
필요한 파일은
struts2-jasperreports-plugin-2.x.x.jar
jasperreports.jar
commons-collections.jar
commons-digester.jar
commons-javaflow.jar
itext.jar
jdt-compiler.jar
버전은 알아서 받기 바란다.
우선 PDF 파일로 변경하기 위해서 .jrxml파일이 필요하다.
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="book_list_template" >
<field name="isbn" class="java.lang.String"/>
<field name="title" class="java.lang.String"/>
<field name="author" class="java.lang.String"/>
<title>
<band height="70">
<staticText>
<reportElement x="230" y="9" width="180" height="32"/>
<textElement><font size="20"/></textElement>
<text><![CDATA[BOOK LIST]]></text>
</staticText>
<line direction="TopDown">
<reportElement x="4" y="40" width="548" height="0" />
<graphicElement stretchType="NoStretch"/>
</line>
</band>
</title>
<columnHeader>
<band height="37" isSplitAllowed="true" >
<staticText>
<reportElement x="100" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[ISBN]]></text>
</staticText>
<staticText>
<reportElement x="250" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[TITLE]]></text>
</staticText>
<staticText>
<reportElement x="400" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[AUTHOR]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20">
<textField>
<reportElement x="100" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{isbn}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="250" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{title}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="400" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{author}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
위와같은 .jrxml 파일을 생성한다.
<field name="isbn" class="java.lang.String"/>
<field name="title" class="java.lang.String"/>
<field name="author" class="java.lang.String"/>
데이터 변수를 미리 정의한 부분이다. 사용될 변수이다.
<title>
<band height="70">
<staticText>
<reportElement x="230" y="9" width="180" height="32"/>
<textElement><font size="20"/></textElement>
<text><![CDATA[BOOK LIST]]></text>
</staticText>
<line direction="TopDown">
<reportElement x="4" y="40" width="548" height="0" />
<graphicElement stretchType="NoStretch"/>
</line>
</band>
</title>
타이틀부분으로 상단에 한번만 출력 될부분이다.
<columnHeader>
<band height="37" isSplitAllowed="true" >
<staticText>
<reportElement x="100" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[ISBN]]></text>
</staticText>
<staticText>
<reportElement x="250" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[TITLE]]></text>
</staticText>
<staticText>
<reportElement x="400" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[AUTHOR]]></text>
</staticText>
</band>
</columnHeader>
컬럼의 헤드를 표시하는 부분으로 역시 한번만 출력된다.
<text><![CDATA[AUTHOR]]></text>
이부분의 데이터가 출력된다.
<detail>
<band height="20">
<textField>
<reportElement x="100" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{isbn}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="250" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{title}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="400" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{author}]]></textFieldExpression>
</textField>
</band>
</detail>
데이터가 들어 있는만큼 루프가 되면서 데이터가 출력이된다.
<textFieldExpression><![CDATA[$F{author}]]></textFieldExpression>
상단에서 정의한 변수를 정의 하면된다.
<![CDATA[AUTHOR]]> 정적으로 글자를 출력할때 사용된다.
<![CDATA[$F{author}]]> 동적으로 데이터가 출렬될때 사용된다.
.jrxml 파일을 그냥 만들려면 xml을 모르는 나로써는 너무 힘든 작업이다.
이럴 위해서 iReport 툴이 있다 이것을 사용해서 작업을 하면 훨씬 쉽고 편하게 작업을 할수 있다.
http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/i/ir/ireport/
위의 사이트에서 다운로드 할수 있다.
iReport-nb-3.1.3-windows-installer.exe |
저는 위의 버전을 사용하였다.
위와 같이 사용을 하면된다.. 우측상단에서 메뉴를 선택하여 드래그 하여서 사용하면된다.
혹시 데이터 중에 한글이 들어가게 되면 미리 보기를 하고 나면 에러 메시지를 볼수 있다.
그럴경우에는
<?xml version="1.0" encoding="UTF-8"?>
부분을
<?xml version="1.0" encoding="euc-kr"?>
로 변경하면 에러메시지는 사라 질것이다.
기본적으로 sturts2가 설정이 되어있다고 가정하고 설명을 하겠다.
struts2 설정
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="jasper" namespace="/" extends="jasperreports-default,struts-default">
<result-types>
<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult" />
<result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult" />
</result-types>
<action name="jasper" class="jasper" method="jaspertsTest">
<result type="jasper">
<param name="location">jrxml/jseper.jasper</param>
<param name="dataSource">jasperBean</param>
</result>
</package>
jasper를 사용하기 위해서는 관련 .jar파일이 필요하다 앞의 글을 참조하기 바란다.
<package name="jasper" namespace="/" extends="jasperreports-default,struts-default">
기본 적으로 struts-default를 참조하는데 여기서 jasperreports-defalut 를 추가 해준다
<result-types>
<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult" />
<result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult" />
</result-types>
여기서는 타입을 설정하는거 같은데 여기는 확실하게 이해가 안되어있어서..패스~~!!!
<result type="jasper">
<param name="location">jrxml/jseper.jasper</param>
<param name="dataSource">jasperBean</param>
</result>
결과를 출력하기 위한 부분이다
<result type="jasper">
타입을 설정해준다.
<param name="location">jrxml/jseper.jasper</param>
자바를 몰라서 많이 고생했든 부분이다.
.jasper 파일 이클립스내에서 컴파일을 해준다 사용자가 직접만드는 파일이 아니다.
.jrxml을 이클립스에 읽어들여서 컴파일 해주는걸로 알고 있는데 자세히는 모르겠다.
<param name="dataSource">jasperBean</param>
action에서 정의한 변수명이된다.
액션파일
import domain.JasperBean;
public class jasper extends ActionSupport {
private static final String REPORT_XML_FILE = "D:/jrxml/infoTotal.jrxml";
private static final String REPORT_COMPILE_FILE = "D:/jrxml/infoTotal.jasper";
private JasperBean jasperBean;
public String jaspertsTest() throws Exception{
jasperBean = infoManager.pdfTotal(regnum);
JasperCompileManager.compileReportToFile(REPORT_XML_FILE,REPORT_COMPILE_FILE);
return SUCCESS;
}
}
public Pdf getJasperBean() {
return jasperBean;
}
public void setJasperBean(JasperBean jasperBean) {
this.jasperBean= jasperBean;
}
private static final String REPORT_XML_FILE = "D:/jrxml/infoTotal.jrxml";
.jrxml 파일 위치를 설정한다..절대경로 해줬다..이방법 말고다른방법이 있을것도 같은데
일단 나는 저렇게 했다.
private static final String REPORT_COMPILE_FILE = "D:/jrxml/infoTotal.jasper";
.jasper 파일은 첨에는 없다..이부분은 어디로 저장을 할껀지 저장위치를 와 파일명을 설정하는거같다.
도메인
public class JasperBean {
private String name;
private String email;
private String age;
public String getName() {
return name;
}
public void setName(String regnum) {
this.name= name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email= email;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
jrxml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="book_list_template" >
<field name="name" class="java.lang.String"/>
<field name="email" class="java.lang.String"/>
<field name="age" class="java.lang.String"/>
<title>
<band height="70">
<staticText>
<reportElement x="230" y="9" width="180" height="32"/>
<textElement><font size="20"/></textElement>
<text><![CDATA[name]]></text>
</staticText>
<line direction="TopDown">
<reportElement x="4" y="40" width="548" height="0" />
<graphicElement stretchType="NoStretch"/>
</line>
</band>
</title>
<columnHeader>
<band height="37" isSplitAllowed="true" >
<staticText>
<reportElement x="100" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[email]]></text>
</staticText>
<staticText>
<reportElement x="250" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[age]]></text>
</staticText>
<staticText>
<reportElement x="400" y="0" width="180" height="29" />
<textElement><font size="15" isUnderline="true"/></textElement>
<text><![CDATA[AUTHOR]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20">
<textField>
<reportElement x="100" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="250" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="400" y="0" width="180" height="15"/>
<textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
jrxml 을 만든다..
pdf 변환을 하면 한글이 보이지 않는경우가 있다. 폰트가 맞지않아서 안보는 경우이다.
이럴때는 폰트를 변화해주어야한다.
<font size="12" pdfFontName="MALGUN.TTF" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
나는 이렇게 일이다 선언을 해주었다.
pdfFontName="MALGUN.TTF"
폰트의 경로도 폼함해서 선언을 해주어야한다.
출처 : http://blog.naver.com/kil0207
댓글