matteo.agostoni Posted May 6, 2016 Posted May 6, 2016 I have developed an application in PHP that uses JasperReports library and runs a report from PHP. To make PHP and jasper reports library to comunicate, I installed PHP/Java Bridge on Tomcat, so that php application can speak with java. I made a simple prototype of the php code that comunicate with java and run jasper report. Here the code: <?php/* This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with This file. If not, see <http://www.gnu.org/licenses/>. */ require_once("http://localhost:8080/JavaBridge/java/Java.inc"); try { $jasperxml = new Java("net.sf.jasperreports.engine.xml.JRXmlLoader"); $jasperDesign = $jasperxml->load(realpath("customer.jrxml")); $query = new Java("net.sf.jasperreports.engine.design.JRDesignQuery"); $query->setText("SELECT customer.first_name AS customer_first_name, customer.last_name AS customer_last_name, customer.email AS customer_email FROM customer customer"); $jasperDesign->setQuery($query); $compileManager = new JavaClass("net.sf.jasperreports.engine.JasperCompileManager"); $report = $compileManager->compileReport($jasperDesign);} catch (JavaException $ex) { echo $ex;} $fillManager = new JavaClass("net.sf.jasperreports.engine.JasperFillManager"); $params = new Java("java.util.HashMap"); $params->put("title", "Customer"); $class = new JavaClass("java.lang.Class"); $class->forName("com.mysql.jdbc.Driver"); $driverManager = new JavaClass("java.sql.DriverManager"); $conn = $driverManager->getConnection("jdbc:mysql://localhost:3306/sakila?zeroDateTimeBehavior=convertToNull", "myuser", "mypassword"); $jasperPrint = $fillManager->fillReport($report, $params, $conn); $exporter = new java("net.sf.jasperreports.engine.JRExporter"); $outputPath = realpath(".") . "/" . "output.pdf"; $exporter = new java("net.sf.jasperreports.engine.export.JRPdfExporter"); $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->JASPER_PRINT, $jasperPrint); $exporter->setParameter(java("net.sf.jasperreports.engine.JRExporterParameter")->OUTPUT_FILE_NAME, $outputPath); header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=output.pdf"); $exporter->exportReport(); readfile($outputPath); unlink($outputPath);?>[/code] The code is correctly runnning. As you can see, actually the code export the report to pdf file and then open the browser. I would like to know how I could directly open the report in the browser without writing the pdf file on disk; in this way I can avoid to give write permission on the directory.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now