lopezsoft/jasperphp

使用 JasperReports 在 PHP 中创建报告

安装: 10

依赖项: 0

建议者: 0

安全性: 0

星星: 0

关注者: 1

分支: 0

语言:HTML

v2.9.4 2023-05-06 23:49 UTC

This package is auto-updated.

Last update: 2024-09-07 02:56:47 UTC


README

通过 JasperReports 6 库,使用 JasperStarter v3.6.2 命令行工具生成报告。

安装

composer require lopezsoft/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/lopezsoft/jasperphp/examples)。使用 iReport 或你的首选文本编辑器打开 hello_world.jrxml 文件,查看源代码。

编译

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

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

JasperStartet::compile(base_path('/vendor/lopezsoft/JasperPHP/examples/hello_world.jrxml'))->execute();

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

注意:如果你使用 Laravel 4,请运行 php artisan tinker 并复制粘贴上述命令。

处理

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

JasperStartet::process(
	base_path('/vendor/lopezsoft/JasperPHP/examples/hello_world.jasper'),
	false,
	array('pdf', 'rtf'),
	array('php_version' => phpversion())
)->execute();

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

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

列表参数

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

$output = JasperStartet::list_parameters(
		base_path('/vendor/lopezsoft/JasperPHP/examples/hello_world.jasper')
	)->execute();

foreach($output as $parameter_description)
	echo $parameter_description;

高级示例

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

JasperStartet::process(
    base_path('/vendor/lopezsoft/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
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.242-b08, mixed mode)

如果你得到

command not found: java

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

$ sudo apt-get install default-jdk

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

Composer

如果您还没有,请安装Composer

composer require lopezsoft/JasperPHP

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

{
    "require": {
		"lopezsoft/JasperPHP": "^2.9.0",
    }
}

然后只需运行

composer update

就完成了。

现在您将拥有可用的JasperStartet别名。

MySQL

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

PostgreSQL

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

注意:Laravel使用pgsql作为驱动名称,而不是postgres

SQLite

我们在/src/JasperStarter/jdbc/目录中提供了SQLite(版本v056,基于SQLite 3.6.14.2)。

array(
    'driver' => 'generic',
    'jdbc_driver' => 'org.sqlite.JDBC',
    'jdbc_url' => 'jdbc:sqlite:/database.sqlite'
)

JSON

源文件示例

{
    "result":{
        "id":26,
        "reference":"0051711080021460005",
        "account_id":1,
        "user_id":2,
        "date":"2017-11-08 00:21:46",
        "type":"",
        "gross":138,
        "discount":0,
        "tax":4.08,
        "nett":142.08,
        "details":[
            {"id":26, "line": 1, "product_id": 26 },
        ]
    },
    "options":{
        "category":[
            {"id":3,"name":"Hair care","service":0,"user_id":1, },
        ],
        "default":{
            "id":1,"name":"I Like Hairdressing",
            "description":null,
            "address":null,
            "website":"https:\/\/www.ilikehairdressing.com",
            "contact_number":"+606 601 5889",
            "country":"MY",
            "timezone":"Asia\/Kuala_Lumpur",
            "currency":"MYR",
            "time_format":"24-hours",
            "user_id":1
        }
    }
}

使用Laravel

	public function generateReceipt($id) {

        $datafile = base_path('/storage/jasper/data.json');
        $output = base_path('/storage/jasper/data'); //indicate the name of the output PDF
        JasperStartet::process(
                    base_path('/resources/reports/taxinvoice80.jrxml'),
                    $output,
                    array("pdf"),
                    array("msg"=>"Tax Invoice"),
                    array("driver"=>"json", "json_query" => "data", "data_file" =>  $datafile)  
                )->execute();
     }

需要对JasperReport数据源进行一些修改。您需要为每个表、列表和子报表指定数据源表达式。

	<datasetRun subDataset="invoice_details" uuid="a91cc22b-9a3f-45eb-9b35-244890d35fc7">
            <dataSourceExpression>
	       <![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("result.details")]]>
	    </dataSourceExpression>
	</datasetRun>

性能

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

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

谢谢

感谢Cenote GmbH提供的JasperStarter工具。

有疑问吗?

在Github上给我发信息lopezsoft

许可证

MIT