在java中從模板生成單詞

報告生成過程通常包括填充包含所需字段佔位符的預定義文檔模板。報告引擎將模板文檔作為輸入,用數據動態填充佔位符並生成結果報告。本文還將展示一個類似的用例,您可以在其中通過使用 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文檔的步驟:

以下代碼示例顯示如何使用 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");

輸出

使用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 文檔。

// 創建文檔對象並使用 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 文檔。

// 創建文檔對象並使用 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 文檔。

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");

輸出

在java中用CSV創建word文檔

了解有關 LINQ 報告引擎的更多信息

LINQ Reporting Engine 支持範圍廣泛的標記,用於在 Java 中動態生成功能齊全的 Word 文檔。您可以在 這篇文章 中探索更多關於這些標籤及其語法的信息。

如果您有任何問題或疑問,可以發帖到 Aspose.Words 論壇

相關文章)