copam/phpjasper

此软件包已被弃用,不再维护。作者建议使用phpjasper软件包。

使用JasperReports在PHP/Laravel中创建报告

v1.5 2019-11-22 19:58 UTC

This package is not auto-updated.

Last update: 2022-01-11 14:29:05 UTC


README

请在此处查看此库的最新版本:https://github.com/PHPJasper/phpjasper

License Total Downloads

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的注意事项

通过运行以下命令检查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 并检查输出是否正常。

安装

  1. 如果您还没有安装,请安装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.pdfhello_world.rtf

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

  1. 安装 Composer
composer require copam/phpjasper

创建一个 'composer.json' 文件

{
    "require": {
        "copam/phpjasper": "1.*"
    }
}
  1. 运行

    composer update

  2. 将提供者添加到 config/app.php 中的 providers 数组中

    JasperPHP\JasperPHPServiceProvider::class,

  3. /public directory 中创建 /report 文件夹

  4. 将文件 hello_world.jrxml/vendor/copam/phpjasper/examples 复制到 /public/report

  5. 运行 php artisan serve

  6. 访问 localhost:8000/reports

  7. 检查 /public/report 文件夹。您有 3 个文件,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(),
        '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 社区做出贡献,请随意进行分支操作!