I want to generate a PDF with a list of users. This is the first time I have used Jasper to create a PDF. I have tried different methods to generate a PDF with a list of users. But I could not find the right way. I retrieved the data from mysql database. then I want to create the pdf. I used Spring mvc and mysql. The thing I want to do is generate a PDF with a user table when I click the download button. I think my problem is in the controller or the jrxml file. I have already generated a PDF for a single user. For that I Followed this post -> How to use JasperReports with Spring MVC?.
Is this correct, how did I set the filed name?
<field name="registerStudent.getUsername()" class="java.lang.String"/>
This is my controller
@RequestMapping(value = "/downloadstudentspdf", method = RequestMethod.GET)
public void studentsdetailspdf(HttpServletResponse response) throws JRException, IOException {
try {
InputStream jasperStream = this.getClass().getResourceAsStream("/reports/studentlist.jasper");
List<RegisterUser> registerStudent = userDao.studentList();
Map<String, Object> map = new HashMap<String, Object>();
JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(registerStudent);
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, datasource);
/* response.setContentType("application/pdf"); */
response.setContentType("application/x-download");
response.setHeader("Content-disposition", "inline; filename=studentsdetails.pdf");
final OutputStream outStream = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, outStream);
} catch (Exception e) {
System.out.println("Exception " + e);
}
}
UserDaoImpl class
public List<RegisterUser> studentList() {
List<RegisterUser> list = jdbcTemplate.query("SELECT * FROM users WHERE role_id='1'",
new RowMapper<RegisterUser>() {
@Override
public RegisterUser mapRow(ResultSet rs, int rowNum) throws SQLException {
RegisterUser user = new RegisterUser();
user.setUsername(rs.getString("username"));
user.setFname(rs.getString("fname"));
user.setLname(rs.getString("lname"));
user.setEmail(rs.getString("email"));
user.setYear(rs.getString("year"));
user.setBirthday(rs.getDate("birthday"));
user.setContact(rs.getString("contact"));
user.setGender(rs.getString("gender"));
user.setRole_id(rs.getString("role_id"));
return user;
}
});
return list;
}
DAO class
package net.spring.dao;
import java.util.List;
import net.spring.model.LoginUser;
import net.spring.model.RegisterUser;
public interface UserDao {
int register(RegisterUser user);
RegisterUser loginThreeRoles(LoginUser login);
List<RegisterUser> studentList();
List<RegisterUser> lecturerList();
int editstudent(RegisterUser user);
int editlecturer(RegisterUser user);
int deletestudent(String username);
int deletelecturer(String username);
int studentprof(RegisterUser user);
RegisterUser studentprof(LoginUser user);
RegisterUser getStudentByUsername(String username);
RegisterUser getLecturerByUsername(String username);
}
studentlist.jrxml
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="84feeac3-d1f7-4503-84bf-fc3fa153df55">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString>
<![CDATA[]]>
</queryString>
<parameter name="registerStudent" class="java.util.List">
<field name="registerStudent.getUsername()" class="java.lang.String"/>
<field name="registerStudent.getFname()" class="java.lang.String"/>
<field name="registerStudent.getLname()" class="java.lang.String"/>
<field name="registerStudent.getEmail()" class="java.lang.String"/>
<field name="registerStudent.getYear()" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="36" splitType="Stretch"/>
</title>
<pageHeader>
<band height="51" splitType="Stretch">
<staticText>
<reportElement x="170" y="10" width="230" height="30" uuid="04d35299-5eb0-4a34-b340-3ca5cf8290fc"/>
<textElement>
<font size="20" isBold="true"/>
</textElement>
<text><![CDATA[Student List]]></text>
</staticText>
</band>
</pageHeader>
<columnHeader>
<band height="37" splitType="Stretch">
<staticText>
<reportElement x="0" y="10" width="70" height="20" uuid="bcaf85c0-57ff-4a34-af27-cbf1330125ae"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[UserName]]></text>
</staticText>
<staticText>
<reportElement x="90" y="10" width="100" height="20" uuid="faf9b9ee-7cf2-4ea5-80b8-d371c3c753b9"/>
<textElement>
<font size="11" isBold="true"/>
</textElement>
<text><![CDATA[First Name]]></text>
</staticText>
<staticText>
<reportElement x="210" y="10" width="70" height="20" uuid="93727672-9f69-4856-aa26-33837e8dc417"/>
<textElement>
<font fontName="SansSerif" isBold="true"/>
</textElement>
<text><![CDATA[Last Name]]></text>
</staticText>
<staticText>
<reportElement x="314" y="10" width="70" height="20" uuid="09b47abe-09b2-479a-bb76-9770e361a23c"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Email]]></text>
</staticText>
<staticText>
<reportElement x="410" y="10" width="100" height="20" uuid="c258f47b-da6a-418d-a5e0-892388ec65c5"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Year]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="39" splitType="Stretch">
<textField>
<reportElement x="0" y="4" width="70" height="16" uuid="99fa4c16-cfe2-4482-828e-4439abb9e8f0"/>
<textFieldExpression><![CDATA[$F{registerStudent.getUsername()}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="210" y="4" width="70" height="16" uuid="ba6e9cfa-6d4c-470b-8bc4-eb2e3411c21e"/>
<textFieldExpression><![CDATA[$F{registerStudent.getFname()}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="310" y="4" width="70" height="16" uuid="447253d3-d268-4873-b0b7-9c174c6a7c9f"/>
<textFieldExpression><![CDATA[$F{registerStudent.getLname()}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="410" y="4" width="145" height="16" uuid="8992d0ad-1f5e-4210-b50b-1e29dc66f119"/>
<textFieldExpression><![CDATA[$F{registerStudent.getYear()}]></textFieldExpression>
</textField>
<line>
<reportElement x="-3" y="27" width="521" height="1" uuid="9b493a65-a499-4199-90bb-b3fedbe45f85"/>
</line>
<textField>
<reportElement x="90" y="4" width="100" height="16" uuid="fcdd8979-dc44-46e3-be56-11e5f33b8e0c">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="73fad7b3-74b5-4436-bd46-d2b9c3c113fd"/>
</reportElement>
<textFieldExpression><![CDATA[$F{registerStudent.getEmail()}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
student.jsp
<main class="page-content">
<div class="container-fluid">
<hr>
<h2 style="background-color:white; opacity:0.8; padding:10px;">STUDENTS</h2>
<hr>
</div>
<div class="container">
<div align="right">
<button class="btn btn-danger" style="margin-right: 20px;">
<a href="${pageContext.request.contextPath}/registerStudent"
style="color: white">New Student</a>
</button>
<button class="btn btn-danger" style="margin-right: 20px;">
<a href="${pageContext.request.contextPath}/downloadstudentspdf"
style="color: white">Download</a>
</button>
<div class="our-team">
<table data-toggle="table" align="center"
class="table table-striped table-bordered" width="80%">
<thead>
<tr>
<th>Username</th>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Year</th>
<th>Birthday</th>
<th>Contact</th>
<th>Gender</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<c:forEach var="registerStudent" items="${listStudent}">
<tr>
<td><c:out value="${registerStudent.username}" /></td>
<td><c:out value="${registerStudent.fname}" /></td>
<td><c:out value="${registerStudent.lname}" /></td>
<td><c:out value="${registerStudent.email}" /></td>
<td><c:out value="${registerStudent.year}" /></td>
<td><c:out value="${registerStudent.birthday}" /></td>
<td><c:out value="${registerStudent.contact}" /></td>
<td><c:out value="${registerStudent.gender}" /></td>
<td><button class="btn btn-primary">
<a
href="${pageContext.request.contextPath}/editstudent/${registerStudent.username}"
style="color: white">Edit</a>
</button> ||
<button class="btn btn-warning">
<a
href="${pageContext.request.contextPath}/deletestudent/${registerStudent.username}"
style="color: white">Delete</a>
</button></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</main>
I searched answers for many times to solve my problem. But still no possible answer could be found.I think you get my problem. If not let me know. Hope your help to solve my issue. Thank you.