0

此报告包含 jasper studio 中的外部 jar,当我在 jasper 中按预期运行时,不会产生任何错误,但如果我在 laravel 上编译它,则会生成错误填充报告错误加载脚本类。

我在 jaspersoft 中看到我的 external.jar 只有名称中的路径,如 class=external.jar,我对 .jasper 文件进行逆向工程,不知道如何 jasperstarter 或 php 访问这个外部 jar 库

Jasper studio:参考库

/Users/me/Documents/GitHub/myproject/storage/app/file/jasper/external.jar

我的 jrxml 的详细信息:

    <scriptlet name="Scriptlet_1" class="external">
        <scriptletDescription><![CDATA[]]></scriptletDescription>
    </scriptlet>

我的 PHP 的详细信息

 $folderstorage = "/app/file/jasper";
        $folderassets = "/User/file/jasper";
        $namef = "invoice";
        $input = storage_path().$folderstorage."/".$namef.".jasper"; 
        $output = storage_path().$folderstorage;
        $options = [
            'format' => [$ext2],
            'locale' => 'en',
            'params' => ['myid'=>$id],
            'db_connection' => [
                'driver' => 'postgres', //mysql, ....
                'username' => env("DB_USERNAME"),
                'password' => env("DB_PASSWORD"),
                'host' => env("DB_HOST"),
                'database' => env("DB_DATABASE"),
                'port' => env("DB_PORT")
            ]
        ];
        if(file_exists(storage_path().$folderstorage."/".$namafile . '.' . $ext)){
            unlink(storage_path().$folderstorage."/".$namafile . '.' . $ext );
        }
        $jasper = new PHPJasper;
        $jasper->compile($input)->process(
            $input,
            $output,
            $options
        )->execute();

在浏览器中运行时,请查看我的 IDE 控制台: Using $input = storage_path().$folderstorage."/".$namef.".jrxml";

value = ((external)parameter_Scriptlet_1_SCRIPTLET.getValue()).calcucredit(((java.math.BigDecimal)variable_sumTotalItem.getEstimatedValue()).doubleValue()).toString().toUpperCase(); //$JR_EXPR_ID=26$

使用 .jasper

Error filling reportError loading scriptlet class: calcucredit

在这个项目上,我运行:

  1. 拉拉维尔 6.2
  2. geekcom/phpjasper:3.3
  3. 碧玉工作室 6.6.0
  4. 在 external.jar 项目中,我包含了 jasperreports-6.7.0
4

1 回答 1

1

为解决这个问题而奋斗了几天,方法简单而尴尬。只需这样做:

将 external.jar 放在 vendor/geekcom/phpjasper/bin/jasperstarter/jdbc/external.jar 在 jrxml 中将 scriptletclass 放在 jasperReport 标记中: <jasperReport scriptletClass="external" 在 jasper 软更改引用库到路径 vendor/geekcom/phpjasper/bin /jasperstarter/jdbc/external.jar 始终记得在进行更改后单击预览,如果缓存最后一个 scriptlet 重新显示,则重新启动 jaspersoft。

于 2020-07-15T17:31:52.070 回答