ra-hael-heilbuth/phpjasper

PHP报表生成器

v3.0 2018-03-07 17:22 UTC

This package is auto-updated.

Last update: 2024-09-11 00:40:46 UTC


README

A PHP Report Generator

Scrutinizer Code Quality Latest Stable Version Minimum PHP Version License

文档

Language-pt_BR

关于

PHPJasper是编译和处理JasperReports (.jrxml & .jasper文件) 的最佳解决方案,仅使用PHP,简而言之:使用PHP生成报表。

注意

  • PHPJasper可以与任何PHP框架一起使用
  • 对于低于7.0的PHP版本,请参阅:v1.16
  • 这里几个使用PHPJasper的示例

为什么选择PHPJasper?

你有没有过需要为你的伟大Web应用程序创建一个具有大量字段的漂亮发票的经历?

我必须这样做,而现有的解决方案并不完美。生成HTML + CSS以制作PDF?这毫无意义! :)

然后我发现JasperReports是最佳的开源报告解决方案。

我能用这个做什么?

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

从他们的网站

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

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

以下是一些你可以做的示例

  • 发票
  • 报告
  • 列表

要求

  • PHP 7.0或更高版本
  • Java JDK 1.8

可选

Java(JDK)

检查您是否已安装Java

$ javac -version
javac version 1.8.0_101

如果您得到

command not found: javac

则使用以下方式安装:(Ubuntu/Debian)

$ sudo apt-get install default-jdk

要安装到:(centOS/Fedora)

# yum install java-1.8.0-openjdk.x86_64

要安装到Windows,请访问链接→ JDK并查找适合您系统的最合适版本。

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

安装

如果您还没有,请安装Composer

composer require lavela/phpjasper

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

{
    "require": {
        "lavela/phpjasper": "^3.0"
    }
}

然后只需运行

composer install

这样就完成了。

示例

《Hello World》示例。

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

编译

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

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

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

use PHPJasper\PHPJasper;

$input = __DIR__ . '/vendor/lavela/phpjasper/examples/hello_world.jrxml';   

$jasper = new PHPJasper;
$jasper->compile($input)->execute();

此命令行程序将编译 hello_world.jrxml 源文件到 hello_world.jasper 文件。

处理中

现在让我们处理之前编译的报告

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

use PHPJasper\PHPJasper;

$input = __DIR__ . '/vendor/lavela/phpjasper/examples/hello_world.jasper';  
$output = __DIR__ . '/vendor/lavela/phpjasper/examples';    
$options = [ 
    'format' => ['pdf', 'rtf'] 
];

$jasper = new PHPJasper;

$jasper->process(
    $input,
    $output,
    $options
)->execute();

现在检查示例文件夹! :) 很棒吧?你现在有了两个文件,hello_world.pdfhello_world.rtf

src/JasperPHP.php 中查看 methods compileprocess 以获取更多详细信息

列出参数

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

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

use PHPJasper\PHPJasper;

$input = __DIR__ . '/vendor/lavela/phpjasper/examples/hello_world_params.jrxml';

$jasper = new PHPJasper;
$output = $jasper->listParameters($input)->execute();

foreach($output as $parameter_description)
    print $parameter_description . '<pre>';

使用数据库生成报告

我们还可以指定用于连接数据库的参数

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

use PHPJasper\PHPJasper;    

$input = '/your_input_path/your_report.jasper';   
$output = '/your_output_path';
$options = [
    'format' => ['pdf'],
    'locale' => 'en',
    'params' => [],
    'db_connection' => [
        'driver' => 'postgres', //mysql, ....
        'username' => 'DB_USERNAME',
        'password' => 'DB_PASSWORD',
        'host' => 'DB_HOST',
        'database' => 'DB_DATABASE',
        'port' => '5432'
    ]
];

$jasper = new PHPJasper;

$jasper->process(
        $input,
        $output,
        $options
)->execute();

注意2

有关完整地区列表,请参阅 支持的地区

使用MSSQL数据库

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

use PHPJasper\PHPJasper;

$input = '/your_input_path/your_report.jasper or .jrxml';   
$output = '/your_output_path';
$jdbc_dir = __DIR__ . '/vendor/lavela/phpjasper/bin/jaspertarter/jdbc';
$options = [
    'format' => ['pdf'],
    'locale' => 'en',
    'params' => [],
    'db_connection' => [
        'driver' => 'generic',
        'host' => '127.0.0.1',
        'port' => '1433',
        'database' => 'DataBaseName',
        'username' => 'UserName',
        'password' => 'password',
        'jdbc_driver' => 'com.microsoft.sqlserver.jdbc.SQLServerDriver',
        'jdbc_url' => 'jdbc:sqlserver://127.0.0.1:1433;databaseName=Teste',
        'jdbc_dir' => $jdbc_dir
    ]
];

$jasper = new PHPJasper;

$jasper->process(
        $input,
        $output,
        $options
    )->execute();

从XML生成报告

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

use PHPJasper\PHPJasper;

$input = '/your_input_path/your_report.jasper';   
$output = '/your_output_path';
$data_file = __DIR__ . '/your_data_files_path/your_xml_file.xml';
$options = [
    'format' => ['pdf'],
    'params' => [],
    'locale' => 'en',
    'db_connection' => [
        'driver' => 'xml',
        'data_file' => $data_file,
        'xml_xpath' => '/your_xml_xpath'
    ]
];

$jasper = new PHPJasper;

$jasper->process(
    $input,
    $output,
    $options
)->execute();

从JSON生成报告

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

use PHPJasper\PHPJasper;

$input = '/your_input_path/your_report.jasper';   
$output = '/your_output_path';

$data_file = __DIR__ . '/your_data_files_path/your_json_file.json';
$options = [
    'format' => ['pdf'],
    'params' => [],
    'locale' => 'en',
    'db_connection' => [
        'driver' => 'json',
        'data_file' => $data_file,
        'json_query' => 'your_json_query'
    ]
];

$jasper = new PHPJasper;

$jasper->process(
    $input,
    $output,
    $options
)->execute();

MySQL

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

PostgreSQL

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

MSSQL

SQL Server的Microsoft JDBC驱动程序6.0、4.2、4.1和4.0.

性能

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

我有一个报告,通过DB连接、图像和多个页面生成发票,处理时间大约为3/4秒。我建议您使用工作器在后台生成报告。

谢谢

Cenote GmbH 提供了 JasperStarter 工具。

JetBrains 提供了 PhpStorm 和所有优秀工具。

有问题吗?

打开一个新的 问题 或查找已关闭的问题

许可

MIT

贡献

为PHP社区做出贡献,进行分支!