Spring Yargの統合

Spring Yargの統合

1. 概要

Yet Another Report Generator(YARG)は、Haulmontによって開発されたJava用のオープンソースレポートライブラリです。 これにより、最も一般的な形式(.doc, .docs, .xls, .xlsx, .html, .ftl, .csv)またはカスタムテキスト形式でテンプレートを作成し、SQL、Groovy、またはJSONによってロードされたデータを入力できます。

この記事では、JSONが読み込まれたデータを含む.docxドキュメントを出力するSpring@RestControllerの使用方法を示します。

2. サンプルのセットアップ

YARGの使用を開始するには、次の依存関係をpom:に追加する必要があります。


    
        
            false
        
        bintray-cuba-platform-main
        bintray
        http://dl.bintray.com/cuba-platform/main
    

...

    com.haulmont.yarg
    yarg
    2.0.4

次に、we need a template for our data;単純なLetter.docxを使用します:

${Main.title}

Hello ${Main.name},

${Main.content}

YARGがマークアップ/テンプレート言語を使用していることに注目してください。これにより、さまざまなセクションにコンテンツを挿入できます。 これらのセクションは、それらが属するデータグループの観点から分けられています。

この例では、文字のtitlename、およびcontentを含む「メイン」グループがあります。

YARGのThese groups are called ReportBandは、さまざまなタイプのデータを分離するのに非常に役立ちます。

3. SpringとYARGの統合

レポートジェネレーターを使用する最良の方法の1つは、ドキュメントを返すことができるサービスを作成することです。

そのため、Springを使用して、テンプレートの読み取り、JSONの取得、ドキュメントへの読み込み、フォーマットされた.docx.の返送を担当する単純な@RestControllerを実装します。

まず、DocumentControllerを作成しましょう:

@RestController
public class DocumentController {

    @GetMapping("/generate/doc")
    public void generateDocument(HttpServletResponse response)
      throws IOException {
    }
}

これにより、ドキュメントの作成がサービスとして公開されます。

次に、テンプレートのロードロジックを追加します。

ReportBuilder reportBuilder = new ReportBuilder();
ReportTemplateBuilder reportTemplateBuilder = new ReportTemplateBuilder()
  .documentPath("./src/main/resources/Letter.docx")
  .documentName("Letter.docx")
  .outputType(ReportOutputType.docx)
  .readFileFromPath();
reportBuilder.template(reportTemplateBuilder.build());

ReportBuilderクラスは、レポートの作成、テンプレートとデータのグループ化を担当します。 ReportTemplateBuilderは、ドキュメントのパス、名前、および出力タイプを指定することにより、以前に定義したLetter.docx__テンプレートをロードします。

次に、add the loaded templateをレポートビルダーに送信します。

次に、ドキュメントに挿入されるデータを定義する必要があります。これは、次のようなData.jsonファイルになります。

{
    "main": {
        "title" : "INTRODUCTION TO YARG",
        "name" : "example",
        "content" : "This is the content of the letter, can be anything we like."
    }
}

これは、テンプレートに必要なタイトル、名前、およびコンテンツを含む「main」オブジェクトを持つ単純なJSON構造です。

それでは、引き続きデータをReportBuilderにロードしましょう。

BandBuilder bandBuilder = new BandBuilder();
String json = FileUtils.readFileToString(
  new File("./src/main/resources/Data.json"));
ReportBand main = bandBuilder.name("Main")
  .query("Main", "parameter=param1 $.main", "json")
  .build();
reportBuilder.band(main);
Report report = reportBuilder.build();

ここでは、ReportBandを作成するためにBandBuilderを定義します。これは、テンプレートドキュメントで前に定義したデータのグループにYARGが使用する抽象化です。

the name with the exact same sectionの「Main」を定義し、クエリメソッドを使用して「Main」セクションを検索し、テンプレートの入力に必要なデータを検索するために使用されるパラメーターを宣言していることがわかります。

YARGはJsonPathを使用してJSONをトラバースすることに注意することが重要です。そのため、この「$ .main」構文が表示されます。

次に、クエリでデータの形式が「json」であることを指定し、レポートand finally, build itにバンドを追加しましょう。

最後のステップは、Reportingオブジェクトを定義することです。このオブジェクトは、データをテンプレートに挿入し、最終的なドキュメントを生成します。

Reporting reporting = new Reporting();
reporting.setFormatterFactory(new DefaultFormatterFactory());
reporting.setLoaderFactory(
  new DefaultLoaderFactory().setJsonDataLoader(new JsonDataLoader()));
response.setContentType(
 "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
reporting.runReport(
  new RunParams(report).param("param1", json),
  response.getOutputStream());

記事の冒頭に記載されている一般的な形式をサポートするDefaultFormatterFactoryを使用します。 その後、JSONの解析を担当するJsonDataLoaderを設定します。

最後の手順では、.docx形式に適切なコンテンツタイプを設定し、レポートを実行します。 これにより、JSONデータが接続され、結果が応答出力ストリームに出力されるテンプレートに挿入されます。

これで、/generate/doc URLにアクセスしてドキュメントをダウンロードでき、生成された.docxに次の結果が表示されます。

image

4. 結論

この記事では、YARGとSpringを簡単に統合し、その強力なAPIを使用して簡単な方法でドキュメントを作成する方法を示しました。

データ入力としてJSONを使用しましたが、GroovyとSQLもサポートされています。

それについてもっと知りたい場合は、ドキュメントhereを見つけることができます。

そしていつものように、あなたは完全な例over on GitHubを見つけることができます。