1.概要
1.1 応用シーン
FineReportでは、レポートをプレビューする際に、レポートをPDF、Excel、Wordなどの一般的なファイル形式にエクスポートできます。また、FineReportデザイナでは、テンプレートを一般的なファイル形式またはビルドインデータテンプレートにエクスポートすることもできます。次の図のようになります。
ユーザがレポートのプレビューやデザイナの操作からファイルをエクスポートせずに、バックグラウンドで直接エクスポートしたい場合はどうすればいいですか?
1.2 実現方法
FineReportは強力な入出力機能を提供し、これらの入出力のクラスは全てcom.fr.report.ioパッケージに含まれています。
レポートの入力とは、レポートのテンプレートファイル(XML形式)からWorkBookオブジェクトを作成することです。出力とは、レポートをさまざまな形式のファイルに保存することです。すなわち、Javaプログラムをコンパイルすることによって、エンジニアリングリソースのバックグラウンドを呼び出し、テンプレートをcpt、ビルドインデータcpt、PDF、Excel、Word、SVG、CSV、image(png、jpg、gif、bmpを含む)などの複数のファイル形式にエクスポートし、エクスポート後にプロセスを解放します。
注:例のコードスキームは、新しい計算エンジンを使用したテンプレートのエクスポートをサポートしません。
1.3 API紹介
注:エクスポート時には、プレビューの異なる方法に対応する異なる計算結果のレポート・コードがあります。レポートプレビューエクスポート:Writeactor、分析プレビューエクスポート:Viewactor、改ページプレビューエクスポート:PageActor
1)ビルドインデータセットテンプレートへのエクスポート
ビルドインデータセットテンプレートへのエクスポートは、元のテンプレートのデータソースを変数条件に基づいて結果を検索してビルドインデータセットに変換し、テンプレートをエクスポートすることです。元のテンプレートを計算する必要はありません。コードは次のように:
2)テンプレートファイルにエクスポート
元のテンプレートをプログラムで編集した後、再びテンプレートファイルにエクスポートすることも、あるパスのテンプレートを別のパスに保存することもできます。コードは次のように:
3) 2003Excelファイルにエクスポート
テンプレートワークブックWorkBookを実行すると結果ワークブックResultWorkBookとなり、計算結果を2003Excelファイルにエクスポートできます。コードは次のように:
4)2007Excelファイルにエクスポート
テンプレートワークブックWorkBookは実行後に結果ワークブックResultWorkBookとなり、計算後の結果を20037Excelファイルにエクスポートできます。コードは次のように:
5)Wordファイルにエクスポート
注:FineReportレポートのエクスポートWordでは、浮遊要素のエクスポートはサポートされていません。グラフなどの浮遊要素を含むテンプレートをエクスポートする場合は、セルにグラフを挿入することなどのセル要素に変更してください。
6)PDFファイルにエクスポート
7)Txtファイルにエクスポート
8)CSVファイルにエクスポート
9)SVGファイルにエクスポート
10)Imageファイルにエクスポート
注:Image画像はpng、jpg、gif、bmp形式をサポートしています。ここでは例としてpng形式で、デフォルトはjpgです。
11)リリースプロセス
エクスポートAPIを使用してバックグラウンドでExcelなどのファイルをエクスポートすると、多くのプロセスが発生します。エクスポートが完了したら、次のコードを追加してプロセスを解放します。
2. 例
次に、バックグラウンドでGettingStarted.cptテンプレートをエクスポートすることを実現し、変数はレポート変数で、デフォルト値は関東に設定されます。
2.1 コンパイル環境準備
プログラムをコンパイルするには、まずJavaプロジェクト環境を作成し、EclipseやideaなどのJavaエディタが必要です。
エディタプロジェクトにFineReportプロジェクトJARパッケージを導入します。インストールされたレポートエンジニアリングが含まれます。
%FR_HOME%\webapps\webroot\WEB-INF\libディレクトリ内のfineで始まる12個のJARパッケージ。
%FR_HOME%\webapps\webroot\WEB-INF\libディレクトリ内のsqlite-jdbc.jar
%Tomcat_HOME%\libTomcatディレクトリ内のservlet-api.jar
%JAVA_HOME%\jdk\libJDKディレクトリ内のtools.jar
slf4j-simple-1.7.25.jar、クリックするとダウンロードできます:slf4j-simple-1.7.25.jar
レポートでデータベースをクエリする必要がある場合は、対応するjdbcドライバまたはプラグインのJARパッケージをインポートする必要があります(JSONデータセットを使用する場合は、JSONデータセットプラグインの下のJARパッケージをインポートします)。
2.2 Javaプログラムのコンパイル
エディタでJavaプログラムExportApi.javaを編集し、必要なクラスを導入した後、テンプレートを取得し、テンプレートを指定した形式のファイルにエクスポートします。完全なコードは以下を参照してください。
注1:コードのStateServiceActivatorは2020.4.26JARパッケージ以降の変更で、前のバージョンでエラーが発生した場合はStateServerActivatorに変更すればよいです。
注2:ユーザが使用する場合は、サンプルコード内のプロジェクトパス、テンプレート名、エクスポートパスをユーザ自身のプロジェクトのものに置き換えることに注意してください。
一般レポートcptコード:
https://code.fanruan.com/demo/example/src/branch/persist/10.0/src/main/java/com/fr/io/ExportApi.java
ダッシュボードのfrmコード:
https://code.fanruan.com/demo/example/src/branch/persist/10.0/src/main/java/com/fr/io/ExportApi_frm.java
2.3 Javaファイルのコンパイル
Javaプログラムの作成が完了したら、ExportApi.javaをコンパイラでコンパイルし、コンパイルが完了したら、Javaコードを実行すると、コードのエクスポートパスのフォルダの下に異なる形式のファイルが生成され、エクスポートが成功します。次の図のようになります。
プログラムのエクスポートを自動的にトリガしたい場合は、Javaでスケジュールタスクを書くことで実行をトリガできます。また、「タスクスケジューラ>カスタム添付ファイル処理」機能でスケジュールトリガを実現することもできます。次の図のようになります。
3. 注意事項
3.1 FineDBロック
問題説明:
コンパイルされたコードを実行すると、SQLException:Databaselockacquisitionfailure:lockFile:...というエラーメッセージが表示されます。次の図のようになります。
原因分析:
エクスポート時に実行環境を有効にし、デザイナを開くと、レポートに組み込まれているデータベースはHSQLデータベースで、HSQLデータベースはマルチスレッドアクセスができないため、エクスポート時に実行環境を有効にするとFineDBがロックされ、エクスポート時にエラーが発生します。
解決策:
方法1:
idea、Eclipseプロセスなどのjavaエディタを閉じ、コード内のエクスポートテンプレートプロジェクト%FR_HOME%\webapps\webroot\WEB-INF\embed\finedbの下のdb.lckファイルを削除します。もう一度javaエディタを開いてコードを実行すればいいです。
注:この方法は一度実行してもエラーが発生し、db.lckファイルを繰り返し削除する必要があります。
方法2:
レポート・エンジニアリングに組み込まれているHSQLデータベースは、マルチスレッド・アクセスができないため、別のデータベースに移行できます。