Javaでテンプレートから単語を生成する

レポート生成プロセスは、多くの場合、目的のフィールドのプレースホルダーを含む事前定義されたドキュメントテンプレートにデータを入力することで構成されます。レポートエンジンは、テンプレートドキュメントを入力として受け取り、プレースホルダーにデータを動的に入力して、結果のレポートを生成します。この記事では、Javaを使用して動的かつプログラムでWordテンプレートにデータを入力することにより、Word文書を生成できる同様のユースケースも紹介します。

DOCXテンプレートからWord文書を生成するには、Aspose.Words for JavaAPIが提供するLINQReportingEngineを使用します。 LINQ Reporting Engineは、Wordテンプレートのテキスト、画像、リスト、テーブル、ハイパーリンク、ブックマークのさまざまなタグをサポートしています。これらのタグを含むテンプレートドキュメントには、Javaオブジェクト、およびXML、JSON、またはCSVデータソースからのデータがエンジンによって入力されます。それでは、Javaを使用してテンプレートからWord文書の生成を始めましょう。

この記事では、以下を使用してテンプレートからWord文書を生成する方法について説明します。

  • Javaオブジェクトからの値、
  • XMLデータソース、
  • JSONデータソース、
  • およびCSVデータソース。

Aspose.Words for Javaのインストール-WordAutomationand Report Generation API

Aspose.Words for Java JARをダウンロードするか、以下の構成を使用してMavenベースのアプリケーションに追加できます。

リポジトリ:

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

依存:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>20.1</version>
    <type>pom</type>
</dependency>

Javaオブジェクトを使用してテンプレートからWord文書を生成する

レポートの生成を開始するには、まず、テンプレートにJavaオブジェクトの値を入力してWord文書を作成します。ドキュメントテンプレートを定義するには、新しいWordドキュメントを作成し、次のタグを挿入してDOCXドキュメントとして保存します。

<<[s.getName()]>> says: "<<[s.getMessage()]>>."

上記のテンプレートでは、「s」はタグの設定に使用されるJavaクラスのオブジェクトとして扱われます。それでは、2つのデータメンバーを持つSenderという名前のクラスを作成しましょう。

public class Sender {
    public Sender(String name, String message) {
        _name = name;
        _message = message;
    } 
    public String getName() {
        return _name;
    } 
    public String getMessage() {
        return _message;
    } 
    private String _name;
    private String _message;
}

次に、WordテンプレートをLINQ Reporting Engineに渡し、Senderのオブジェクトの値に基づいてWordドキュメントを生成します。 Wordドキュメントを生成する手順は次のとおりです。

  • Documentオブジェクトを作成し、テンプレートのパスで初期化します。
  • Senderクラスのオブジェクトを作成して初期化します。
  • ReportingEngineクラスのオブジェクトを作成します。
  • ドキュメントテンプレート、データソース、およびデータソースの名前を受け入れるReportingEngine.buildReport()メソッドを使用してレポートを作成します。
  • Document.save()メソッドを使用して生成されたWordドキュメントを保存します。

次のコードサンプルは、Javaオブジェクトの値を使用してWordテンプレートからWord文書を生成する方法を示しています。

// Documentオブジェクトを作成し、DOCXテンプレートで初期化します。
Document doc = new Document("template.docx");
// Senderオブジェクトを作成します。
Sender sender = new Sender("LINQ Reporting Engine", "Hello World");
// ReportingEngineオブジェクトを作成します。
ReportingEngine engine = new ReportingEngine();
// レポートを作成します。
engine.buildReport(doc, sender, "s");
// Word文書として保存します。
doc.save("word.docx");

出力

Javaオブジェクトを使用してテンプレートでWord文書を生成する

XMLデータを使用してテンプレートからWord文書を作成する

さらに一歩進んで、少し複雑なシナリオでXMLデータソースを使用してWordテンプレートにデータを入力する方法を見てみましょう。以下は、Wordテンプレートにデータを入力するために使用するXMLデータソースです。

<Persons>
   <Person>
       <Name>John Doe</Name>
       <Age>30</Age>
       <Birth>1989-04-01 4:00:00 pm</Birth>
   </Person>
   <Person>
       <Name>Jane Doe</Name>
       <Age>27</Age>
       <Birth>1992-01-31 07:00:00 am</Birth>
   </Person>
   <Person>
       <Name>John Smith</Name>
       <Age>51</Age>
       <Birth>1968-03-08 1:00:00 pm</Birth>
   </Person>
</Persons>

このシナリオでは、XMLデータソースの複数のレコードに対して、テンプレートドキュメントで次のタグを使用します。

<<foreach [in persons]>>Name: <<[Name]>>, Age: <<[Age]>>, Date of Birth: <<[Birth]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.average(p => p.Age)]>>

この場合、Wordドキュメントを生成するためのJavaコードは同じであり、データソースとしてJavaオブジェクトを渡すことを除いて、ReportingEngine.buildReport()メソッドでXmlDataSourceオブジェクトを渡します。次のコードサンプルは、JavaのXMLデータソースを使用してドキュメントテンプレートにデータを入力することにより、Wordドキュメントを作成する方法を示しています。

// Documentオブジェクトを作成し、DOCXテンプレートで初期化します。
Document doc = new Document("template.docx");
// XMLをロードする
XmlDataSource dataSource = new XmlDataSource("./datasource.xml");
// ReportingEngineオブジェクトを作成します。
ReportingEngine engine = new ReportingEngine();
// レポートを作成します。
engine.buildReport(doc, dataSource, "persons");
// Word文書として保存します。
doc.save("word.docx");

出力

JavaでXMLを使用してテンプレートでWord文書を生成する

JSONデータを使用してテンプレートからWord文書を生成する

次に、JSONデータソースを使用してDOCXテンプレートからWord文書を生成する方法を見てみましょう。以下は、この例で使用するJSONデータです。

[
   {
       Name: "John Smith",
       Contract:
       [
           {
               Client:
               {
                   Name: "A Company"
               },
               Price: 1200000
           },
           {
               Client:
               {
                   Name: "B Ltd."
               },
               Price: 750000
           },
           {
               Client:
               {
                   Name: "C & D"
               },
               Price: 350000
           }
       ]
   },
   {
       Name: "Tony Anderson",
       Contract:
       [
           {
               Client:
               {
                   Name: "E Corp."
               },
               Price: 650000
           },
           {
               Client:
               {
                   Name: "F & Partners"
               },
               Price: 550000
           }
       ]
   },
]

この例では、マネージャーによってグループ化されたクライアントのリストを含むWordドキュメントを生成します。このシナリオによれば、DOCXテンプレートは次のようになります。

<<foreach [in managers]>>Manager: <<[Name]>>
Contracts:
<<foreach [in Contract]>>- <<[Client.Name]>> ($<<[Price]>>)
<</foreach>>
<</foreach>>

JSONデータソースをロードするために、Aspose.WordsはJsonDataSourceクラスを提供します。次のコードサンプルは、JavaでJSONデータソースを使用してテンプレートからWord文書を作成する方法を示しています。

// Documentオブジェクトを作成し、DOCXテンプレートで初期化します。
Document doc = new Document("template.docx");
// JSONをロードする
JsonDataSource dataSource = new JsonDataSource("datasource.json");
// ReportingEngineオブジェクトを作成します。
ReportingEngine engine = new ReportingEngine();
// レポートを作成します。
engine.buildReport(doc, dataSource, "managers");
// Word文書として保存します。
doc.save("word.docx");

出力

JavaでJSONを使用してWord文書を作成する

CSVデータを使用してテンプレートからWord文書を生成する

最後になりましたが、次のCSVデータソースを使用してWordテンプレートにデータを入力してWordドキュメントを生成する方法を確認しましょう。

この例では、次のWordテンプレートが使用されます。

<<foreach [in persons]>>Name: <<[Column1]>>, Age: <<[Column2]>>, Date of Birth: <<[Column3]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.average(p => p.Column2)]>>

CSVデータソースを処理するために、Aspose.WordsはCsvDataSourceクラスを提供します。次のコードサンプルは、JavaでCSVデータソースを使用してWord文書を生成する方法を示しています。

// Documentオブジェクトを作成し、DOCXテンプレートで初期化します。
Document doc = new Document("template.docx");
// CSVを読み込む
CsvDataSource dataSource = new CsvDataSource("datasource.csv");
// ReportingEngineオブジェクトを作成します。
ReportingEngine engine = new ReportingEngine();
// レポートを作成します。
engine.buildReport(doc, dataSource, "persons");
// Word文書として保存します。
doc.save("word.docx");

出力

JavaでCSVを使用してWord文書を作成する

LINQレポートエンジンの詳細

LINQ Reporting Engineは、Javaでフル機能のWordドキュメントを動的に生成するためのさまざまなタグをサポートしています。これらのタグとその構文について詳しくは、この記事をご覧ください。

ご質問やご質問がございましたら、Aspose.Wordsフォーラムに投稿してください。

関連記事