このレポートにはジャスパー スタジオの外部 jar が含まれています。期待どおりに実行されているジャスパーで実行すると、何もエラーは発生しませんが、これを 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 のコンソールが表示されます。
value = ((external)parameter_Scriptlet_1_SCRIPTLET.getValue()).calcucredit(((java.math.BigDecimal)variable_sumTotalItem.getEstimatedValue()).doubleValue()).toString().toUpperCase(); //$JR_EXPR_ID=26$
ジャスパーの使用
Error filling reportError loading scriptlet class: calcucredit
このプロジェクトでは、次のように実行します。
- ララベル 6.2
- geekcom/phpjasper : 3.3
- ジャスパースタジオ6.6.0
- external.jar プロジェクトに jasperreports-6.7.0 を含めました