fazo96 / jasperphp
使用 JasperReports 在 PHP 中创建报告
This package is not auto-updated.
Last update: 2024-09-24 21:01:50 UTC
README
通过 JasperReports 6 库和 JasperStarter v3 命令行工具生成报告的包。
安装
composer require cossou/jasperphp
简介
本包旨在成为编译和加工 JasperReports (.jrxml & .jasper 文件) 的解决方案。
为什么?
你有没有在伟大的网络应用中创建包含大量字段的漂亮发票的经历?
我必须这样做,但现有的解决方案并不完美。生成 HTML + CSS 以制作 PDF?WTF?这完全没有意义! :)
然后我发现了 JasperReports,这是最好的开源报告解决方案。
我能用它做什么?
嗯,一切。JasperReports 是一个强大的报告和 BI 工具。
从他们的网站
JasperReports 库是全球最受欢迎的开源报告引擎。它完全用 Java 编写,能够使用来自任何类型数据源的数据,并生成完美像素的文档,这些文档可以查看、打印或导出为各种文档格式,包括 HTML、PDF、Excel、OpenOffice 和 Word。
我建议使用 Jaspersoft Studio 来构建你的报告,将其连接到数据源(例如 MySQL),循环遍历结果,并输出到 PDF、XLS、DOC、RTF、ODF 等。
你可以做的一些示例
- 发票
- 报告
- 列表
示例
《Hello World》示例。
转到仓库根目录下的示例目录(vendor/cossou/jasperphp/examples
)。用 iReport 或你喜欢的文本编辑器打开 hello_world.jrxml
文件,查看源代码。
编译
首先,我们需要将我们的 JRXML
文件编译成一个 JASPER
二进制文件。我们只需要做一次。
注意:如果你使用 Jaspersoft Studio,则不需要执行此步骤。你可以在程序内直接编译。
JasperPHP::compile(base_path() . '/vendor/cossou/jasperphp/examples/hello_world.jrxml')->execute();
此命令将 hello_world.jrxml
源文件编译成 hello_world.jasper
文件。
注意:如果你使用 Laravel 4,请运行 php artisan tinker
并复制并粘贴上面的命令。
加工
现在让我们处理我们之前编译的报告
JasperPHP::process( base_path() . '/vendor/cossou/jasperphp/examples/hello_world.jasper', false, array("pdf", "rtf"), array("php_version" => phpversion()) )->execute();
现在查看示例文件夹! :) 很棒吧?你现在有 2 个文件,hello_world.pdf
和 hello_world.rtf
。
查看 src/JasperPHP/JasperPHP.php
文件中 compile
和 process
函数的 API。
列出参数
查询 Jasper 文件以检查给定 Jasper 报告文件中可用的参数
$output = JasperPHP::list_parameters( base_path() . '/vendor/cossou/jasperphp/examples/hello_world.jasper' )->execute(); foreach($output as $parameter_description) echo $parameter_description;
高级示例
我们还可以指定连接到数据库的参数
JasperPHP::process( base_path() . '/vendor/cossou/jasperphp/examples/hello_world.jasper', false, array("pdf", "rtf"), array("php_version" => phpversion()), array( 'driver' => 'postgres', 'username' => 'vagrant', 'host' => 'localhost', 'database' => 'samples', 'port' => '5433', ) )->execute();
要求
- Java JDK 1.6
- PHP exec() 函数
- [可选] Mysql Connector(如果你想使用数据库)
- [可选] Jaspersoft Studio(用于绘制和编译你的报告)
安装
Java
检查是否已安装Java
$ java -version
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)
如果你得到
command not found: java
那么使用以下命令安装它(Ubuntu/Debian):
$ sudo apt-get install default-jdk
现在再次运行java -version
并检查输出是否正常。
Composer
如果你还没有,请安装Composer。
composer require cossou/jasperphp
或者在你的composer.json
文件中添加
{ "require": { "cossou/jasperphp": "~2", } }
然后只需运行
composer update
这样就完成了。
使用Laravel 5吗?
将JasperPHP\JasperPHPServiceProvider::class
添加到配置文件config/app.php
中的服务提供者部分。
文件config/app.php
<?php ....... ....... 'providers' => [ ....... Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, //insert jasper service provider here JasperPHP\JasperPHPServiceProvider::class ], ...... ......
在控制器中使用时,在命名空间后添加use JasperPHP
<?php namespace App\Http\Controllers; use JasperPHP; // put here ...... ...... public function generateReport() { //jasper ready to call JasperPHP::compile(base_path() . '/vendor/cossou/jasperphp/examples/hello_world.jrxml')->execute(); } ......
在路由中使用
use JasperPHP\JasperPHP as JasperPHP; Route::get('/', function () { $jasper = new JasperPHP; // Compile a JRXML to Jasper $jasper->compile(__DIR__ . '/../../vendor/cossou/jasperphp/examples/hello_world.jrxml')->execute(); // Process a Jasper file to PDF and RTF (you can use directly the .jrxml) $jasper->process( __DIR__ . '/../../vendor/cossou/jasperphp/examples/hello_world.jasper', false, array("pdf", "rtf"), array("php_version" => "xxx") )->execute(); // List the parameters from a Jasper file. $array = $jasper->list_parameters( __DIR__ . '/../../vendor/cossou/jasperphp/examples/hello_world.jasper' )->execute(); return view('welcome'); });
使用Laravel 4吗?
将以下内容添加到你的app/config/app.php
的提供者数组中
'JasperPHP\JasperPHPServiceProvider',
现在你将可以使用JasperPHP
别名。
MySQL
我们在/src/JasperStarter/jdbc/
目录中提供了MySQL连接器(v5.1.34)。
PostgreSQL
我们在/src/JasperStarter/jdbc/
目录中提供了PostgreSQL(v9.4-1203)。
注意:Laravel使用pgsql
作为驱动程序名称,而不是postgres
。
性能
取决于复杂度、数据量以及你的机器资源(告诉我你的使用情况)。
我有一个报告,它使用数据库连接、图片和多页生成发票,处理时间大约需要3/4秒。我建议你使用工作进程在后台生成报告。
谢谢
感谢Cenote GmbH提供的JasperStarter工具。
有问题?
在Twitter上联系我@cossou。
许可
MIT