copam / phpjasper
使用JasperReports在PHP/Laravel中创建报告
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2022-01-11 14:29:05 UTC
README
请在此处查看此库的最新版本:https://github.com/PHPJasper/phpjasper
Linux服务器注意事项
不要忘记为目录/vendor/copam/phpjasper/src/JasperStarter/bin和二进制文件jasperstarter提供777权限
简介
此软件包是使用PHP纯代码或通过Laravel框架编译和处理Jasper报告(.jrxml & .jasper)的完美解决方案。
为什么需要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
在(Ubuntu/Debian)上安装java:
$ sudo apt-get install default-jdk
在(centOS/Fedora)上安装:
# yum install java-1.8.0-openjdk.x86_64
对于Windows,请点击链接→ JDK 并查找适合您操作系统的适当版本。
再次运行命令 java -version
并检查输出是否正常。
安装
- 如果您还没有安装,请安装Composer,然后运行以下命令
composer require copam/phpjasper
创建一个名为 'composer.json' 的文件,并写入以下代码
{ "require": { "copam/phpjasper": "1.*" } }
运行以下命令
composer install
您已成功安装PHPJasper
示例
Hello World 示例。
前往存储库根目录下的示例目录(vendor/copam/phpjasper/examples
)。使用JasperStudio或您喜欢的编辑器打开文件hello_world.jrxml
,查看代码。
编译
首先,我们需要将具有 .JRXML
扩展的文件编译成一个 .JASPER
类型的二进制文件
注意:如果您不想使用 Jaspersoft Studio,可以按以下方式编译您的 .jrxml 文件
require __DIR__ . '/vendor/autoload.php'; use JasperPHP\JasperPHP; $input = __DIR__ . '/vendor/copam/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/copam/phpjasper/examples/hello_world.jasper'; $output = __DIR__ . '/vendor/copam/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/copam/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/copam/phpjasper/examples/hello_world.jrxml'; $output = __DIR__ . '/vendor/copam/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();
使用 JasperPHP 与 Laravel 5.*
- 安装 Composer
composer require copam/phpjasper
创建一个 'composer.json' 文件
{ "require": { "copam/phpjasper": "1.*" } }
-
运行
composer update
-
将提供者添加到 config/app.php 中的 providers 数组中
JasperPHP\JasperPHPServiceProvider::class,
-
在 /public directory 中创建 /report 文件夹
-
将文件 hello_world.jrxml 从 /vendor/copam/phpjasper/examples 复制到 /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。
从 XML 源在 PHP/Laravel 5.* 中生成报告
看看如何轻松地从 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\copam\phpjasper\examples\CancelAck.jrxml 和 \vendor\copam\phpjasper\examples\CancelAck.xml 复制到 \public\report 文件夹
从 JSON 文件在 PHP/Laravel 5.* 中生成报告
看看如何轻松地从 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\copam\phpjasper\examples\json.jrxml 和 \vendor\copam\phpjasper\examples\contacts.json 复制到 \public\report 文件夹
MySQL
我们已将 MySQL 连接器(v5.1.39)包含在 /src/JasperStarter/jdbc/
文件夹中
PostgreSQL
我们将PostgreSQL (v9.4-1203) 包含在 /src/JasperStarter/jdbc/
文件夹中。
MSSQL
SQL Server 的 Microsoft JDBC 驱动程序 6.0、4.2、4.1 和 4.0。.
性能
根据您的报告大小而异。
感谢
感谢 Cenote GmbH 提供的 JasperStarter。
感谢 JetBrains 提供的 PhpStorm 和所有优秀的解决方案。
疑问?
打开一个 问题,或搜索旧问题。
许可证
MIT
贡献
为 PHP 和 Laravel 社区做出贡献,请随意进行分支操作!