APIエクスポート

  • 作成者:FRInternational
  • 編集回数:1次
  • 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)ビルドインデータセットテンプレートへのエクスポート

    ビルドインデータセットテンプレートへのエクスポートは、元のテンプレートのデータソースを変数条件に基づいて結果を検索してビルドインデータセットに変換し、テンプレートをエクスポートすることです。元のテンプレートを計算する必要はありません。コードは次のように:

     /**ワークブックをビルドインデータセットテンプレートにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"EmbExport.cpt"));
    EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter();
    templateExporter.export(outputStream, workbook);

    2)テンプレートファイルにエクスポート

    元のテンプレートをプログラムで編集した後、再びテンプレートファイルにエクスポートすることも、あるパスのテンプレートを別のパスに保存することもできます。コードは次のように:

    /**ワークブックをテンプレートファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"TmpExport.cpt"));
    ((WorkBook) workbook).export(outputStream);

    3) 2003Excelファイルにエクスポート

    テンプレートワークブックWorkBookを実行すると結果ワークブックResultWorkBookとなり、計算結果を2003Excelファイルにエクスポートできます。コードは次のように:

     /**結果ワークブックを2003Excelファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"ExcelExport2003.xls"));
    ExcelExporter ExcelExport = new ExcelExporter();
    ExcelExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    4)2007Excelファイルにエクスポート

    テンプレートワークブックWorkBookは実行後に結果ワークブックResultWorkBookとなり、計算後の結果を20037Excelファイルにエクスポートできます。コードは次のように:

    /**結果ワークブックを2007Excelファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"ExcelExport2007.xlsx"));
    StreamExcel2007Exporter ExcelExport1 = new StreamExcel2007Exporter();
    ExcelExport1.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    5)Wordファイルにエクスポート

    注:FineReportレポートのエクスポートWordでは、浮遊要素のエクスポートはサポートされていません。グラフなどの浮遊要素を含むテンプレートをエクスポートする場合は、セルにグラフを挿入することなどのセル要素に変更してください。

    /**結果ワークブックをWordファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"WordExport.doc"));
    WordExporter WordExport = new WordExporter();
    WordExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    6)PDFファイルにエクスポート

    /**結果ワークブックをPdfファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"PdfExport.pdf"));
    PDFExporter PdfExport = new PDFExporter();
    PdfExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    7)Txtファイルにエクスポート

    /**結果ワークブックをTxtファイルにエクスポートします(Txtファイル自体はテーブル、グラフなどをサポートしていません。エクスポートされるテンプレートは、通常は明細表)*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"TxtExport.txt"));
    TextExporter TxtExport = new TextExporter();
    TxtExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    8)CSVファイルにエクスポート

    /**結果ワークブックをCSVファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"CsvExport.csv"));
    CSVExporter CsvExport = new CSVExporter();
    CsvExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    9)SVGファイルにエクスポート

     /**結果ワークブックをSVGファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"SvgExport.svg"));
    SVGExporter SvgExport = new SVGExporter();
    SvgExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    10)Imageファイルにエクスポート

    注:Image画像はpng、jpg、gif、bmp形式をサポートしています。ここでは例としてpng形式で、デフォルトはjpgです。

    /**結果ワークブックをimageファイルにエクスポート*/
    outputStream = new FileOutputStream(new java.io.File(outputUrl+"PngExport.png"));
    ImageExporter ImageExport = new ImageExporter();
    ImageExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));

    11)リリースプロセス

    エクスポートAPIを使用してバックグラウンドでExcelなどのファイルをエクスポートすると、多くのプロセスが発生します。エクスポートが完了したら、次のコードを追加してプロセスを解放します。

    outputStream.close();            
    module.stop();

    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データベースは、マルチスレッド・アクセスができないため、別のデータベースに移行できます。

    Attachment List


    Theme: 【D】删除篇目
    既に最初
    既に最後
    • Helpful
    • Not helpful
    • Only read