i4n / phpjasper
使用 JasperReports 在 PHP/Laravel 中创建报告
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-26 17:43:55 UTC
README
Linux 服务器注意
请确保为目录 /vendor/i4n/phpjasper/src/JasperStarter/bin 和二进制文件 jasperstarter 提供权限 777。
解决 Windows 字体问题 apt-get install ttf-mscorefonts-installer
## 简介 此包是编译和处理 Jasper 报告 (.jrxml & .jasper) 的最佳解决方案,无论是使用纯 PHP 还是通过 Laravel 框架。
### 为什么需要 PHPJasper?
您是否曾需要为您的 Web 系统创建一个复杂的 PHP 报告?
我需要过,所以我寻找了一些解决方案,大多数都是复杂的,并且您需要编写 HTML + CSS 来生成 PDF,这没有意义,而且非常耗时 :)
我向大家介绍 JasperReports,这是目前存在的最佳开源报告解决方案。
### 我可以用它做什么?
以下内容摘自 JasperSoft 网站
JasperReports 库是全球最受欢迎的开源报告生成机制。它完全用 Java 编写,能够使用来自任何类型数据源的数据,并生成可以在各种文档格式中查看、打印或导出的完美文档,包括 HTML、PDF、Excel、OpenOffice 和 Word。
您可以做到的事情示例
- 发票
- 报告
- 列表
## 要求
- Java JDK 1.8
- PHP exec()
- [可选] Mysql Connector (如果您打算使用该数据库)
- [可选] PostgreSQL Connector (如果您打算使用该数据库)
- [可选] Jaspersoft Studio (用于创建和编译您的报告)
### 关于 Java 的注意事项
通过运行以下命令检查 Java 是否已安装:
$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
如果您得到以下返回结果
command not found: java
在以下位置安装 java: (Ubuntu/Debian)
$ sudo apt-get install default-jdk
在以下位置安装: (centOS/Fedora)
# yum install java-1.8.0-openjdk.x86_64
对于 Windows,请点击链接-> JDK 并查找适用于您操作系统的正确版本。
再次运行 java -version
命令并检查输出是否正常。
## 安装
- 如果您还没有安装 Composer,请先安装它,然后运行以下命令:
composer require i4n/phpjasper
创建一个 'composer.json' 文件并写入以下代码:
{ "require": { "i4n/phpjasper": "1.*" } }
运行以下命令:
composer install
您已成功安装 PHPJasper。
## 示例
### Hello World 示例。
请转到仓库根目录下的示例目录 (vendor/i4n/phpjasper/examples
)。使用 JasperStudio 或您的首选编辑器打开文件 hello_world.jrxml
并查看代码。
编译
首先,我们需要将扩展名为 .JRXML
的文件编译成一个二进制文件 .JASPER
。
注意:如果您不想使用 Jaspersoft Studio,可以通过以下方式编译您的 .jrxml 文件:
require __DIR__ . '/vendor/autoload.php'; use JasperPHP\JasperPHP; $input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world.jrxml'; $jasper = new JasperPHP; $jasper->compile($input)->execute();
以下命令将源文件 hello_world.jrxml
编译成文件 hello_world.jasper
。
#### 处理
现在我们来处理我们的报告
require __DIR__ . '/vendor/autoload.php'; use JasperPHP\JasperPHP; $input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world.jasper'; $output = __DIR__ . '/vendor/i4n/phpjasper/examples'; $jasper = new JasperPHP; $jasper->process( $input, $output, array("pdf", "rtf") )->execute();
现在查看examples文件夹! :) 做得怎么样?你有2个文件,hello_world.pdf
和hello_world.rtf
。
检查文件src/JasperPHP/JasperPHP.php
中compile
和process
函数的API。
####列出参数
查询jasper文件以检查报告中可用的参数
require __DIR__ . '/vendor/autoload.php'; use JasperPHP\JasperPHP; $input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world_params.jrxml'; $jasper = new JasperPHP; $output = $jasper->list_parameters($input)->execute(); foreach($output as $parameter_description) print $parameter_description . '<pre>';
###从数据库生成报告
为您的数据库添加特定参数
require __DIR__ . '/vendor/autoload.php'; use JasperPHP\JasperPHP; $input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world.jrxml'; $output = __DIR__ . '/vendor/i4n/phpjasper/examples'; $jasper = new JasperPHP; $jasper->process( $input, $output, array("pdf", "rtf"), array("php_version" => phpversion()), array( 'driver' => 'postgres', 'username' => 'vagrant', 'host' => 'localhost', 'database' => 'samples', 'port' => '5432', ), 'pt_BR' //locale )->execute();
###在Laravel 5.*中使用JasperPHP
- 安装Composer
composer require i4n/phpjasper
创建一个'composer.json'文件
{ "require": { "i4n/phpjasper": "1.*" } }
-
运行
composer update
-
在config/app.php的providers数组中添加provider
JasperPHP\JasperPHPServiceProvider::class,
-
在
/public directory中创建文件夹 /report -
将
/vendor/i4n/phpjasper/examples中的 hello_world.jrxml文件复制到 /public/report -
运行
php artisan serve -
访问
localhost:8000/reports -
检查文件夹
/public/report。你有3个文件, hello_world.pdf
,hello_world.rtf
和hello_world.xml
。
将以下代码复制到您的route.php文件中
use JasperPHP\JasperPHP; Route::get('/reports', function () { $output = public_path() . '/report/'.time().'_hello_world'; $report = new JasperPHP; $report->process( public_path() . '/report/hello_world.jrxml', $output, array('pdf', 'rtf', 'xml'), array(), array(), 'pt_BR' //locale )->execute(); });
在这个例子中我们生成了3个文件:pdf,rtf和xml。
###在PHP/Laravel 5.*中从XML生成报告
看看如何从XML源轻松生成报告
use JasperPHP\JasperPHP; public function xmlToPdf() { $output = public_path() . '/report/'.time().'_CancelAck'; $ext = "pdf"; $data_file = public_path() . '/report/CancelAck.xml'; $driver = 'xml'; $xml_xpath = '/CancelResponse/CancelResult/ID'; $php_jasper = new JasperPHP; $php_jasper->process( public_path() . '/report/CancelAck.jrxml', $output, array($ext), array(), array('data_file' => $data_file, 'driver' => $driver, 'xml_xpath' => $xml_xpath))->execute(); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.time().'_CancelAck.'.$ext); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Length: ' . filesize($output.'.'.$ext)); flush(); readfile($output.'.'.$ext); unlink($output.'.'.$ext); }
注意
为了使用上述示例,您需要在
\vendor\i4n\phpjasper\examples\CancelAck.jrxml和\vendor\i4n\phpjasper\examples\CancelAck.xml
###在PHP/Laravel 5.*中从JSON文件生成报告
看看如何从JSON源轻松生成报告
use JasperPHP\JasperPHP; public function jsonToPdf() { $output = public_path() . '/report/'.time().'_Contacts'; $ext = "pdf"; $driver = 'json'; $json_query= "contacts.person"; $data_file = public_path() . '/report/contacts.json'; $php_jasper = new JasperPHP; $php_jasper->process( public_path() . '/report/json.jrxml', $output, array($ext), array(), array('data_file' => $data_file, 'driver' => $driver, 'json_query' => $json_query))->execute(); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.time().'_Contacts.'.$ext); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Length: ' . filesize($output.'.'.$ext)); flush(); readfile($output.'.'.$ext); unlink($output.'.'.$ext); }
注意
为了使用上述示例,您需要在
\vendor\i4n\phpjasper\examples\json.jrxml和\vendor\i4n\phpjasper\examples\contacts.json
###MySQL
我们在/src/JasperStarter/jdbc/
文件夹中包含了MySQL connector (v5.1.39)
###PostgreSQL
我们在/src/JasperStarter/jdbc/
文件夹中包含了PostgreSQL (v9.4-1203)
###MSSQL
Microsoft JDBC Drivers 6.0, 4.2, 4.1, and 4.0 for SQL Server.
##性能
根据报告的大小而变化
##感谢
感谢JetBrains的PhpStorm和所有优秀的解决方案。
##疑问?
打开一个问题,或搜索旧问题。
##许可证
MIT
##贡献
向PHP和Laravel社区贡献,欢迎fork!!!