![Javaでテンプレートから単語を生成する](images/Generate-Word-from-Template-Java-1.png#center)
レポート生成プロセスは、多くの場合、目的のフィールドのプレースホルダーを含む事前定義されたドキュメントテンプレートにデータを入力することで構成されます。レポートエンジンは、テンプレートドキュメントを入力として受け取り、プレースホルダーにデータを動的に入力して、結果のレポートを生成します。この記事では、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文書を生成する](images/Create-word-document-in-Java.png#center)
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文書を生成する](images/Create-word-document-in-Java-using-XML.png#center)
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文書を作成する](images/Create-word-document-in-Java-using-JSON.png#center)
CSVデータを使用してテンプレートからWord文書を生成する
最後になりましたが、次のCSVデータソースを使用してWordテンプレートにデータを入力してWordドキュメントを生成する方法を確認しましょう。
John Doe | 30 | 1989-04-01 4:00:00 pm | |
---|---|---|---|
Jane Doe | 27 | 1992-01-31 07:00:00 am | |
John Smith | 51 | 1968-03-08 1:00:00 pm |
この例では、次の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文書を作成する](images/Create-word-document-in-Java-using-CSV.png#center)
LINQレポートエンジンの詳細
LINQ Reporting Engineは、Javaでフル機能のWordドキュメントを動的に生成するためのさまざまなタグをサポートしています。これらのタグとその構文について詳しくは、この記事をご覧ください。
ご質問やご質問がございましたら、Aspose.Wordsフォーラムに投稿してください。