jpaalmeida / phpjasperxml
PHPJasperXML读取jrxml模板并生成PDF文件
Requires
- php: >=7.0
This package is auto-updated.
Last update: 2024-09-09 14:14:25 UTC
README
PHPJasperXML在我们的产品中正在积极使用,但我们有非常紧张的项目计划,现在正在进行大量的开发工作,我们没有太多时间来改进它(但我们不时会进行一些微调)。从版本1.1开始,结构已更改,它使用更有效的算法,组织得更好,但有时可能需要稳定化。
关于PHPJasperXML
我们启动这个项目是为了简化在PHP中开发Web/打印机友好型报告。经过多年的开发,这个项目已经稳定,并创建了大量的Web报告。您可以通过jasper report studio(http://community.jaspersoft.com/project/jaspersoft-studio)设计您的报告,然后使用phpjasperxml在PHP中渲染它。服务器端不需要Java桥接。我们借用tcpdf和phpexcel将报告导出为pdf/excel。到目前为止,它支持到php7.2(仅在7.0和7.2上进行了测试)。
如果您需要快速导出Excel引擎(phpexcel非常慢),您可以从以下位置获取商业驱动程序
- 跨平台Excel库(用C/C++编写)http://www.libxl.com/
- PHP扩展用于libxl https://github.com/iliaal/php_excel
一旦加载了Excel库,phpjasperxml应检测到它,并使用它来导出Excel,性能将提高6-7倍!
PHPJasperXML不是jaspersoft的完整替代品,它有一些限制。我们已使用它多年,并且它已被证明是稳定的,但它并非100%功能齐全。已知的问题包括
- 子报告在详细信息带中(我认为标题和页脚应该没问题)无法完美渲染,技术上似乎很难同时计算子报告的高度并与其他相同详细信息带中的所有元素平衡。
- 一些条形码尚不支持(QR码已支持)
- 由于tcpdf的限制,某些情况下文本可能无法垂直对齐。
- 还有一些其他限制,到目前为止,我们已经改变了我们的方法以适应这些限制。
- PHPJasperXML允许您一次生成PDF/excel,但因为它算法的限制,不适用于运行100页以上的报告。
- PHPJasperXML的最佳用途是用于设计/打印文档,例如发票、采购订单、服务订单等可打印文档。短报告运行良好,允许很好地导出Excel。对于长报告,您应使用替代报告工具。
安装
- 下载并解压缩此项目到您的网站根目录(我假设为/var/www)
- 将sampledb.sql导入到mysql数据库中,在此项目中我们假设您的用户名为root,密码为mysql,数据库名为phpjasperxml。如果您使用不同的用户名/密码/数据库名,则应更改sample1.php和sample2.php中的设置。
- 使用您喜欢的网络浏览器,浏览到https:///PHPJasperXML/index.php,测试您喜欢的报告。
- 完成。
如何使用此类
- 您可以使用iReport编辑sample1.jrxml和sample2.jrxml,并在网络浏览器中查看效果。
- 您可以使用任何文本编辑器编辑sample1.php和sample2.php,您会发现将报告集成到项目中就像花生一样简单。
- 由于此项目仍处于初期阶段,因此文档尚未准备好。然而,对于熟悉PHP和iReport的用户来说,使用此类应该没有问题。
PHP代码
<?php
include_once 'path_to_phpjasperxml/PHPJasperXML.inc.php';//in this case, phpjasperxml is your submodule from github
$PHPJasperXML = new PHPJasperXML("en","TCPDF"); //if export excel, can use PHPJasperXML("en","XLS OR XLSX");
//$PHPJasperXML->debugsql=true;
$PHPJasperXML->arrayParameter = array('para1'=>'1','para2'=>'2');
$PHPJasperXML->load_xml_file('file1.jrxml'); //if xml content is string, then $PHPJasperXML->load_xml_string($templatestr);
//$PHPJasperXML->sql = $sql; //if you wish to overwrite sql inside jrxml
$dbdriver="mysql";//natively is 'mysql', 'psql', or 'sqlsrv'. the rest will use PDO driver. for oracle, use 'oci'
$PHPJasperXML->transferDBtoArray(DBSERVER,DBUSER,DBPASS,DBNAME,$dbdriver);
$PHPJasperXML->outpage('I'); //$PHPJasperXML->outpage('I=render in browser/D=Download/F=save as server side filename according 2nd parameter','filename.pdf or filename.xls or filename.xls depends on constructor');
许可证
- PHPJasperXML使用MIT许可,这意味着你可以做任何你想做的事情。然而,它使用了一些来自不同许可的库。
- TCPDF(用于绘制PDF):GPL V3 https://github.com/tecnickcom/TCPDF
- PHPEXCEL(当你需要将数据导出为Excel且不使用libxl时):LGPL https://github.com/PHPOffice/PHPExcel
- Lib_Excel(当你希望使用商业libxl库,性能提升6倍):https://github.com/iliaal/php_excel
- PChart2(当你希望绘制图表时):GPL V3 http://www.pchart.net/license
支持的数据库
目前PHPJasperXML支持
- mysql(使用mysqli)
- postgres
- sql server
- PDO(用于其他数据库)
如何调试?
很多时候我们想要调试并找出报告中的问题,最简单的方法是在报告URL后附加字符串debugsql=1&showhtmldata=1
,如下所示
http://www.mydomain.com/myreport.php?para1=1&debugsql=1&showhtmldata=1