dericktan/phpjasper

使用JasperReports在PHP中创建报告

安装: 154

依赖: 0

建议者: 0

安全: 0

星级: 2

关注者: 3

分支: 20

语言:HTML

v1.5.1 2017-01-04 19:09 UTC

This package is auto-updated.

Last update: 2024-09-13 03:09:04 UTC


README

Latest Stable Version License Monthly Downloads Total Downloads

你的服务器使用Linux吗?

请务必为目录/vendor/dericktan/phpjasper/src/JasperStarter/bin和文件二进制文件jasperstarter授予权限777

##介绍

此软件包旨在成为编译和处理JasperReports (.jrxml & .jasper文件)的解决方案。

###为什么?

你有没有在伟大的Web应用程序中创建过带有许多字段的漂亮发票?

我必须这么做,而现有的解决方案都不完美。生成HTML + CSS来制作PDF?什么鬼?这没有任何意义! :)

然后我发现了JasperReports,这是最好的开源报告解决方案。

###我能用它做什么?

嗯,一切。JasperReports是报告和BI的强大工具。

从他们的网站

JasperReports库是全球最受欢迎的开源报告引擎。它完全用Java编写,能够使用来自任何类型数据源的数据,并生成像素完美的文档,可以查看、打印或导出为HTML、PDF、Excel、OpenOffice和Word等文档格式。

我建议使用Jaspersoft Studio来构建你的报告,连接到你的数据源(例如MySQL、POSTGRES),遍历结果并将输出到PDF、XLS、DOC、RTF、ODF等。

你可以做的示例

  • 发票
  • 报告
  • 列表

通过JasperReports 6库和JasperStarter v3命令行工具生成报告的软件包。

##要求

##安装

###Java

检查你是否已经安装了Java

$ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM)  Client VM (build 25.65-b01, mixed mode, sharing)

如果你得到

command not found: java

那么用以下方法安装它(Ubuntu/Debian):

$ sudo apt-get install default-jdk

现在再次运行java -version并检查输出是否正常。

##安装

如果你没有安装Composer,请安装它。

composer require dericktan/phpjasper

或者在你的'composer.json'文件中添加

{
    "require": {
		"dericktan/phpjasper": "1.*"
    }
}

然后只需运行

composer install

就完成了。

##示例

###Hello World示例。

转到存储库根目录中的示例目录(vendor/dericktan/phpjasper/examples)。用iReport或你喜欢的文本编辑器打开hello_world.jrxml文件,查看源代码。

编译

首先,我们需要将我们的JRXML文件编译成一个JASPER二进制文件。我们只需要做一次。

注意:如果你使用的是Jaspersoft Studio,则不需要执行此步骤。你可以在程序中直接编译。

require __DIR__ . '/vendor/autoload.php';

use JasperPHP\JasperPHP;

$input = __DIR__ . '/vendor/dericktan/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/dericktan/phpjasper/examples/hello_world.jasper';
$output = __DIR__;

$jasper = new JasperPHP;

$jasper->process(
	$input,
	$output,
	array("pdf", "rtf")
)->execute();

现在检查示例文件夹! :) 很不错,现在你有两个文件,hello_world.pdfhello_world.rtf

查看 src/JasperPHP/JasperPHP.php 文件中 compileprocess 函数的 API

####列出参数

查询 Jasper 文件以检查给定 Jasper 报告文件中可用的参数

require __DIR__ . '/vendor/autoload.php';

use JasperPHP\JasperPHP;

$input = __DIR__ . '/vendor/dericktan/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/dericktan/phpjasper/examples/hello_world.jrxml';
$output = __DIR__;

$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',
	)						
)->execute();

###在 Laravel 5.* 中使用 JasperPHP

  1. 如果你没有安装Composer,请安装它。
composer require dericktan/phpjasper

或者在你的'composer.json'文件中添加

{
    "require": {
		"dericktan/phpjasper": "1.*"
    }
}
  1. 然后只需运行

    composer update

  2. 将以下内容添加到 config/app.php 的 providers 数组中

    JasperPHP\JasperPHPServiceProvider::class,

  3. /public 目录 上创建一个 /report 文件夹

  4. /vendor/dericktan/phpjasper/examples 中的 hello_world.jrxml 文件复制到 /public/report 目录

  5. 运行 php artisan serve

  6. 访问 localhost:8000/reports

  7. 检查 /public/report 目录。现在你有三个文件,hello_world.pdfhello_world.rtfhello_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()  
        )->execute();
});

在此示例中,我们生成 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';
		
        $jasper = new JasperPHP;
        
        $jasper->process(
            public_path() . '/report/CancelAck.jrxml',
            $output,
            array($ext),
            array(),
            array('data_file' => $data_file, 'driver' => $driver, 'xml_xpath' => $xml_xpath),                   
            false,
            false
        )->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\dericktan\phpjasper\src\JasperStarter\examples\CancelAck.jrxml\vendor\dericktan\phpjasper\src\JasperStarter\examples\CancelAck.xml 到文件夹: \public\report

###从 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';

        $jasper = new JasperPHP;

        $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);

    }

###为导出的 PDF 设置密码 您现在可以轻松地为 PDF 文档设置密码

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';
        $password = "jasper";

        $jasper = new JasperPHP;

        $jasper->process(
            public_path() . '/report/json.jrxml',
            $output,
            array($ext),
            array(),
            array('data_file' => $data_file, 'driver' => $driver, 'json_query' => $json_query,
            null,
            null,
            $password
        )->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\dericktan\phpjasper\src\JasperStarter\examples\CancelAck.jrxml\vendor\dericktan\phpjasper\src\JasperStarter\examples\CancelAck.xml 到文件夹: \public\report

###MySQL

我们在 /src/JasperStarter/jdbc/ 目录中提供了 MySQL 连接器(v5.1.34)。

###PostgreSQL

我们在 /src/JasperStarter/jdbc/ 目录中提供了 PostgreSQL(v9.4-1203)。

##性能

取决于复杂性、数据量和机器资源(告诉我您的使用案例)。

我有一个生成带有数据库连接、图片和多页面的 发票 的报告,处理时间大约为 3/4 秒。我建议您使用工作进程在后台生成报告。

##感谢

感谢 Cenote GmbH 提供的 JasperStarter 工具。

##有问题?

通过 Skype [leandro.bittencourt16] 或电子邮件 [leandrocintrabitencourt@gmail.com] 联系我

通过 Skype [danielrodrigueslima] 或电子邮件 [danielrodrigues-ti@hotmail.com] 联系我

通过电子邮件 [derick.tan988@gmail.com] 联系我

##许可证

MIT