Web framework with JasperReports integration?
What web development frameworks natively support JasperReports?
Consider the following form as an example:
<form name="report" method="post">
<input type="hidden" name="REPORT_PATH" value="reports/Names" />
<input type="hidden" name="REPORT_FILE" value="List" />
<input type="hidden" name="REPORT_FORMAT" value="pdf" />
<input type="hidden" name="REPORT_EMBED" value="false" />
Name: <input type="text" name="report_Name" 开发者_运维百科value="" /><br />
Date: <input type="text" name="report_Date" value="" /><br />
<input type="submit" name="View" value="View" />
</form>
The framework would pass the report_
parameters to JasperReports, which in turn runs reports/Names/List.jasper
, and then sends a PDF attachment to the browser.
In general, the framework can:
- Configure the report (i.e., the hidden
REPORT_
variables) - Use a web FORM for setting report parameters (i.e., the
report_
variables) - Handle configuring database connection, report execution, etc.
I don't care about the technical minutia on how the integration works, as long as it is simple.
Try Dynamic Jasper.
When I started making JasperReports with JSF I didn't find any framework to fit exactly what I was looking for. In one point I wanted to open source the engine I made (the company rejected).
Anyway, my idea is so simple, I built a general Servlet to receive all types of report actions then dispatch to specific factories. Most of the work was in Javascript.
Anyway, try DJ, if it fails you, I would be happy to explain more about my own engine.
PHP/Java Bridge:
<?php
checkjavaExtension();
function report_parse_post_parameters() {
// Automatically extract report parameters (data types converted in report).
//
$params = new java('java.util.HashMap');
// Get the names of the form elements that contain lists of comma-separated
// values.
//
$reportArrays = explode( ',', $_POST['report_Array'] );
// Convert each of the comma-separated values into a list of values.
//
foreach( $reportArrays as $reportArray ) {
$arrays = array_filter( explode( ',', $_POST[ $reportArray ] ) );
// Map the values to a java.util.ArrayList.
//
$arrayList = new java( 'java.util.ArrayList' );
foreach( $arrays as $value ) {
$arrayList->add( $value );
}
// Pass the list of values into the report (without the "report_" prefix).
//
$params->put( substr( $reportArray, 7 ), $arrayList );
// Remove the value from the POST array.
//
unset( $_POST[ $reportArray ] );
}
// Don't pass the list of array names into the report.
//
unset( $_POST['report_Array'] );
// Pass the remaining POST "report_" variables as report parameters.
//
foreach( $_POST as $name => $value ) {
if( strpos( $name, "report_" ) === 0 ) {
$params->put( substr( $name, 7 ), $value );
}
}
return $params;
}
function report_execute( $report ) {
$user = 'username';
$password = 'password';
$report = realpath("/home/reports/$report.jasper");
// Load the MySQL database driver.
//
java( 'java.lang.Class' )->forName( 'com.mysql.jdbc.Driver' );
// Attempt a database connection.
//
$conn = java( 'java.sql.DriverManager' )->getConnection(
"jdbc:mysql://localhost:3306/database?user=$user&password=$password" );
$params = report_parse_post_parameters();
// Use the fill manager to produce the report.
//
$fm = java('net.sf.jasperreports.engine.JasperFillManager');
$pm = $fm->fillReport($report, $params, $conn);
header('Cache-Control: no-cache private');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment, filename=report.pdf');
header('Content-Type: application/pdf');
header('Content-Transfer-Encoding: binary');
java_set_file_encoding("ISO-8859-1");
$em = java('net.sf.jasperreports.engine.JasperExportManager');
$result = $em->exportReportToPdf($pm);
header('Content-Length: ' . strlen( $result ) );
echo $result;
}
?>
The Spring framework supports JasperReports.
精彩评论