1. 概要

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

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

2. 例の設定

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

<repositories>
    <repository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <id>bintray-cuba-platform-main</id>
        <name>bintray</name>
        <url>http://dl.bintray.com/cuba-platform/main</url>
    </repository>
</repositories>
...
<dependency> 
    <groupId>com.haulmont.yarg</groupId> 
    <artifactId>yarg</artifactId> 
    <version>2.0.4</version> 
</dependency>

次に、データ用のテンプレートが必要です; 単純なLetter.docxを使用します:

${Main.title}

Hello ${Main.name},

${Main.content}

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

この例では、文字の title name 、およびcontentを含む「Main」グループがあります。

これらのグループはYARGでは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テンプレートをロードします。

次に、ロードされたテンプレートをレポートビルダーに追加します。

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

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

これは、テンプレートに必要なタイトル、名前、コンテンツを含む「メイン」オブジェクトを含む単純な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が使用する抽象化です。

名前をまったく同じセクション「Main」で定義し、クエリメソッドを使用して「Main」セクションを検索し、必要なデータを検索するために使用されるパラメータを宣言していることがわかります。テンプレートに記入します。

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

次に、クエリでデータの形式が「json」であることを指定し、レポートにバンドを追加して、最後にビルドします

最後のステップは、 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に次の結果が表示されます。

4. 結論

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

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

詳細については、ドキュメントこちらをご覧ください。

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