fazo96/jasperphp

使用 JasperReports 在 PHP 中创建报告

安装: 154

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 114

语言:HTML

v2.3.0 2017-06-29 21:30 UTC

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.pdfhello_world.rtf

查看 src/JasperPHP/JasperPHP.php 文件中 compileprocess 函数的 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

检查是否已安装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