Java Reference
In-Depth Information
For our
moveFirst()
implementation, we simply reset the values of
currentRowIndex
and
currentColumnIndex
to
0
.
Using the Custom JRDataSource
Implementation
Writing code to take advantage of a custom
JRDataSource
implementation is not
much different from writing code that uses standard JasperReports datasources.
After all, both custom and standard datasources implement the
JRDataSource
interface. The following example illustrates how to take advantage of our custom
CSVDataSource
:
package net.ensode.jasperbook;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperRunManager;
public class CsvDSReportServlet extends HttpServlet
{
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{
ServletOutputStream servletOutputStream = response.
getOutputStream();
InputStream reportStream = getServletConfig().getServletContext()
.getResourceAsStream("/reports/AircraftReport.jasper");
try
{
CsvDataSource csvDataSource = new CsvDataSource(new
InputStreamReader(
getServletConfig().getServletContext().getResourceAsStream(
"/reports/AircraftData.csv")));
JasperRunManager.runReportToPdfStream(reportStream,