報告生成過程通常包括填充包含所需字段佔位符的預定義文檔模板。報告引擎將模板文檔作為輸入,用數據動態填充佔位符並生成結果報告。本文還將展示一個類似的用例,您可以在其中通過使用 Java 以編程方式動態填充 Word 模板來生成 Word 文檔。
要從 DOCX 模板生成 Word 文檔,我們將使用 Aspose.Words for Java API 提供的 LINQ Reporting Engine。 LINQ Reporting Engine 支持 Word 模板的文本、圖像、列表、表格、超鏈接和書籤的各種標記。包含這些標籤的模板文檔由引擎使用來自 Java 對像以及 XML、JSON 或 CSV 數據源的數據填充。因此,讓我們開始使用 Java 從模板生成 Word 文檔。
本文將介紹如何使用以下模板從模板生成 Word 文檔:
- 來自 Java 對象的值,
- XML數據源,
- JSON數據源,
- 和 CSV 數據源。
安裝 Aspose.Words for Java - Word 自動化和報告生成 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 類對象。因此,讓我們創建一個名為 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 報告引擎並根據發件人對象的值生成 Word 文檔了。以下是生成Word文檔的步驟:
- 創建 Document 對象並使用模板路徑對其進行初始化。
- 創建並初始化 Sender 類的對象。
- 創建 ReportingEngine 類的對象。
- 使用接受文檔模板、數據源和數據源名稱的 ReportingEngine.buildReport() 方法構建報告。
- 使用 Document.save() 方法保存生成的 Word 文檔。
以下代碼示例顯示如何使用 Java 對象的值從 Word 模板生成 Word 文檔。
// 創建文檔對象並使用 DOCX 模板進行初始化。
Document doc = new Document("template.docx");
// 創建發件人對象。
Sender sender = new Sender("LINQ Reporting Engine", "Hello World");
// 創建 ReportingEngine 對象。
ReportingEngine engine = new ReportingEngine();
// 生成報告。
engine.buildReport(doc, sender, "s");
// 另存為Word文檔。
doc.save("word.docx");
輸出
使用 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 文檔。
// 創建文檔對象並使用 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");
輸出
使用 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 文檔。
// 創建文檔對象並使用 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");
輸出
使用 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 文檔。
// 創建文檔對象並使用 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");
輸出
了解有關 LINQ 報告引擎的更多信息
LINQ Reporting Engine 支持範圍廣泛的標記,用於在 Java 中動態生成功能齊全的 Word 文檔。您可以在 這篇文章 中探索更多關於這些標籤及其語法的信息。
如果您有任何問題或疑問,可以發帖到 Aspose.Words 論壇。