smart145/phpjasper

PHP报告生成器

维护者

详细信息

github.com/smart145/phpjasper

源代码

安装数: 29 123

依赖项: 0

建议者: 0

安全性: 0

星标: 1

关注者: 0

分支: 162

语言:HTML

v3.3.19 2024-05-21 19:02 UTC

README

PHPJasper logo

PHPJasper

PHP报告生成器

Build Status Coverage Status Latest Stable Version Minimum PHP Version Total Downloads License PHPStan All Contributors

文档

Language-pt_BR

请考虑捐款,支持我们的活动

关于

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

我们Discord频道

https://discord.gg/7FpDnQ

注意事项

为什么选择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.2或更高版本
  • Java JDK 1.8

可选

  • 任何jdbc驱动程序,用于从数据库(MySQL、POSTGRES、MSSQL...)生成报告,必须复制到文件夹bin/jasperstarter/jdbc
  • 我们在bin/jasperstarter/jdbc目录中提供了<强> PostgreSQL(42.2.9)。
  • 我们在bin/jasperstarter/jdbc目录中提供了<强> MySQL连接器(v5.1.48)。
  • Microsoft JDBC Drivers SQL Server.
  • <强> Jaspersoft Studio(用于绘制报告)。

安装

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

composer require geekcom/phpjasper

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

{
    "require": {
        "geekcom/phpjasper": "^3.2.0"
    }
}

然后只需运行

composer install

就这样。

PHPJasper与Docker

安装了Docker CE和docker-compose后,只需运行

  • docker-compose up -d
  • docker exec -it phpjasper composer install

要执行测试

  • docker exec -it phpjasper sudo composer test
  • docker exec -it phpjasper sudo composer testdox

要手动查看测试覆盖率,执行文件:tests/log/report/index.html

帮助我们编写新的测试,进行分支操作 :)

示例

《你好,世界》示例。

前往仓库根目录下的示例目录(vendor/geekcom/phpjasper/examples)。使用 Jaspersoft Studio 或您喜欢的文本编辑器打开 hello_world.jrxml 文件,并查看源代码。

编译

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

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

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

use PHPJasper\PHPJasper;

$input = __DIR__ . '/vendor/geekcom/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/geekcom/phpjasper/examples/hello_world.jasper';  
$output = __DIR__ . '/vendor/geekcom/phpjasper/examples';    
$options = [ 
    'format' => ['pdf', 'rtf'] 
];

$jasper = new PHPJasper;

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

现在查看示例文件夹! :) 很好对吧?您现在有 2 个文件,hello_world.pdfhello_world.rtf

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

列出参数

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

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

use PHPJasper\PHPJasper;

$input = __DIR__ . '/vendor/geekcom/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/geekcom/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();

性能

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

我有一个生成带有 DB 连接、图片和多页的 发票 报告,它大约需要 3/4 秒 来处理。我建议您使用工作器在后台生成报告。

谢谢

Cenote GmbHJasperStarter 工具。

JetBrainsPhpStorm 和所有优秀的工具。

有问题?

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

许可

MIT

贡献

贡献者 ✨

感谢这些优秀的人(emoji key

此项目遵循 all-contributors 规范。欢迎任何形式的贡献!