paulofilipem / phpjasperxml
PHP WYSIWYG Web/PDF 报告库
1.5
2020-01-09 17:40 UTC
README
PHP WYSIWYG Web/PDF 报告库
本项目旨在简化 PHP 中开发网页/打印机友好型报告的过程。经过多年的发展,该项目已趋于稳定,并创建了许多网络报告。您可以通过 jasper report studio(http://community.jaspersoft.com/project/jaspersoft-studio)设计报告,然后使用 phpjasperxml 在 PHP 中渲染。服务器端无需 javabridge。我们借用了 tcpdf 和 phpexcel 来导出 PDF/Excel 报告。目前它支持 up to php7.2(仅在 7.0 和 7.2 上进行了测试)。
如果您需要快速导出 Excel(phpexcel 很慢),您可以从以下网站获取商业驱动程序:
- Cross platform Excel Library(用 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
- 字体(在tcpdf/fonts中有许多字体):我们没有确切知道每个字体的许可协议,您在使用字体时需自行承担风险。
支持的数据库
目前PHPJasperXML支持
- mysql(使用mysqli)
- postgres
- sql server
- PDO(用于其他数据库)
明显限制
- 这是一个PHP库,在定义值或打印表达式时,它不支持Java语法或Groovy代码。
- 子报告在详细带中支持不佳,但在页面页眉和页脚中表现尚可。
- 图表支持较差,我们需要人帮忙改进,因为我们不使用PDF中的图表。
如何调试?
很多时候,我们想要调试并找出报告中哪里出错了,最简单的方法是在报告URL后附加字符串debugsql=1&showhtmldata=1
,如下所示
http://www.mydomain.com/myreport.php?para1=1&debugsql=1&showhtmldata=1