search
HomeBackend DevelopmentPHP TutorialPHP calls JasperReport report through PHP/JAVA Bridge_PHP tutorial

This article talks about using PHP-Java-Bridge technology to realize the output of JasperReport web reports.

JasperReport (http://jasperforge.org/) is a powerful and flexible report generation tool that can display rich page content and convert it into PDF, HTML, or XML formats. This library is written entirely in Java and can be used to generate dynamic content in a variety of Java applications, including J2EE, Web applications.

The attached report design tool is iReport (free). This tool can realize visual report design and can output reports in common formats of PDF, HTML, and WORD. The saved files have a .jrxml suffix and require a Java environment to run normally. PHP cannot Call directly.

Since PHP cannot be called directly, it has to resort to PHP-Java-Bridge technology. For details, please refer to http://php-java-bridge.sourceforge.net/pjb/index.php

1. Install tomcat. If you choose the exe installation version, the jre environment will be automatically installed during installation. If it is the compressed version of tomcat, you need to install the java environment separately, and the configuration is more complicated. It is recommended to use the installation version of tomcat.

Configure tomcat port 6000, the default port 8080 is occupied, and the site root directory is webapps under tomcat

2. Download the php-java-bridge package at the address http://php-java-bridge.sourceforge.net/pjb/download.php. After downloading, unzip it. There is a JavaBridge.war file in it. Copy this file to tomcat. For webapps, after running http://localhost:6000/JavaBridge/, a JavaBridge directory will be generated in the webapps.

3. Install ireport3.0 (there is an updated version). Copy all the contents in C:Program FilesJasperSoftiReport-3.0.0lib to tomcat's webapps/JavaBridge/WEB-INF/lib/. These packages need to be found by JavaBridge. Just fine.

4. Copy the java directory from the generated JavaBridge directory to the PHP site (or find the php.ini file, change the allow_url_include parameter inside to on, and directly reference java/java.inc under JavaBridge). Download the report file http://www.rjohnson.id.au/download/jasper/test.jrxml and place it under the PHP site.

Then create a PHP file under the PHP site

ireport.php (the code involves ports and needs to be changed according to personal circumstances)

1

2

3 /**

  4  * see if the java extension was loaded.

  5 */

6 function checkJavaExtension()

7 {

8 if(!extension_loaded('java'))

9      {

10         $sapi_type = php_sapi_name();

11 

12              //$port = (isset($_SERVER['SERVER_PORT']) && (($_SERVER['SERVER_PORT'])>1024)) ? $_SERVER['SERVER_PORT'] : '6000';

13 //echo $port;

14 $port = 6000;

15         if ($sapi_type == "cgi" || $sapi_type == "cgi-fcgi" || $sapi_type == "cli")

16 {

17            if(!(PHP_SHLIB_SUFFIX=="so" && @dl('java.so'))&&!(PHP_SHLIB_SUFFIX=="dll" && @dl('php_java.dll'))&&!(@include_once("java /Java.inc"))&&!(require_once("http://127.0.0.1:$port/JavaBridge/java/Java.inc")))

18                                    {

19                return "java extension not installed.";

20 }

21 }

22 else

23           {

24 if(!(@include_once("java/Java.inc")))

25                                   {

26                                                

27 require_once("http://127.0.0.1:$port/JavaBridge/java/Java.inc");

28 }

29 }

30 }

 31     if(!function_exists("java_get_server_name"))

 32     {

 33         return "The loaded java extension is not the PHP/Java Bridge";

 34     }

 35

 36     return true;

 37 }

 38

 39 /**

 40  * convert a php value to a java one...

 41  * @param string $value

 42  * @param string $className

 43  * @returns boolean success

 44 */ 

 45 function convertValue($value, $className) 

 46 { 

 47     // if we are a string, just use the normal conversion 

 48     // methods from the java extension... 

 49     try  

 50     { 

 51         if ($className == 'java.lang.String') 

 52         { 

 53             $temp = new Java('java.lang.String', $value); 

 54             return $temp; 

 55         } 

 56         else if ($className == 'java.lang.Boolean' || 

 57             $className == 'java.lang.Integer' || 

 58             $className == 'java.lang.Long' || 

 59             $className == 'java.lang.Short' || 

 60             $className == 'java.lang.Double' || 

 61             $className == 'java.math.BigDecimal') 

 62         { 

 63             $temp = new Java($className, $value); 

 64             return $temp; 

 65         } 

 66         else if ($className == 'java.sql.Timestamp' || 

 67             $className == 'java.sql.Time') 

 68         { 

 69             $temp = new Java($className); 

 70             $javaObject = $temp->valueOf($value); 

 71             return $javaObject; 

 72         } 

 73     } 

 74     catch (Exception $err) 

 75     { 

 76         echo (  'unable to convert value, ' . $value . 

 77                 ' could not be converted to ' . $className); 

 78         return false; 

 79     }

 80  

 81     echo (  'unable to convert value, class name '.$className. 

 82             ' not recognised'); 

 83     return false; 

 84 }

 85

 86

 87 checkJavaExtension();

 88

 89 $compileManager = new JavaClass("net.sf.jasperreports.engine.JasperCompileManager");

 90 $report = $compileManager->compileReport(realpath("test.jrxml"));

 91

 92 $fillManager = new JavaClass("net.sf.jasperreports.engine.JasperFillManager");

 93

 94 $params = new Java("java.util.HashMap");

 95 $params->put("text", "This is a test string");

 96 $params->put("number", 3.00);

 97 $params->put("date", convertValue("2007-12-31 0:0:0", "java.sql.Timestamp"));

 98

 99 $emptyDataSource = new Java("net.sf.jasperreports.engine.JREmptyDataSource");

100 $jasperPrint = $fillManager->fillReport($report, $params, $emptyDataSource);

101

102 $outputPath = realpath(".")."/"."output.pdf";

103

104 $exportManager = new JavaClass("net.sf.jasperreports.engine.JasperExportManager");

105 $exportManager->exportReportToPdfFile($jasperPrint, $outputPath);

106

107 header("Content-type: application/pdf");

108 readfile($outputPath);

109

110 unlink($outputPath);

111

112 ?>

5、访问PHP站点,http://www.BkJia.com :8080/ireport.php,就可以输出PDF文档。

 

 

摘自 有所为,有所不为

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478560.htmlTechArticle本文说到的是用PHP-Java-Bridge技术实现JasperReport web报表的输出。 JasperReport(http://jasperforge.org/),是一个强大、灵活的报表生成工具,能够展示丰...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),