Proces generowania raportu częściej polega na wypełnieniu predefiniowanych szablonów dokumentów zawierających symbole zastępcze dla żądanych pól. Mechanizmy raportowania przyjmują dokument szablonu jako dane wejściowe, dynamicznie wypełniają pola zastępcze danymi i generują wynikowe raporty. W tym artykule zostanie również przedstawiony podobny przypadek użycia, w którym można generować dokumenty programu Word, wypełniając szablony programu Word dynamicznie i programowo przy użyciu języka Java.
Do generowania dokumentów Word z szablonów DOCX użyjemy LINQ Reporting Engine oferowanego przez Aspose.Words for Java API. LINQ Reporting Engine obsługuje różne znaczniki tekstu, obrazów, list, tabel, hiperłączy i zakładek dla szablonów Word. Dokumenty szablonów zawierające te znaczniki są wypełniane przez silnik danymi pochodzącymi z obiektów Java oraz źródeł danych XML, JSON lub CSV. Zacznijmy więc generować dokumenty programu Word z szablonów przy użyciu języka Java.
W tym artykule omówiono sposób generowania dokumentu programu Word z szablonu przy użyciu:
- wartości z obiektów Java,
- źródło danych XML,
- źródło danych JSON,
- i źródło danych CSV.
Instalowanie Aspose.Words for Java — interfejs API automatyzacji programu Word i generowania raportów
Możesz pobrać Aspose.Words for Java JAR lub dodać go do swojej aplikacji opartej na Maven, korzystając z poniższych konfiguracji.
Magazyn:
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
Zależność:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>20.1</version>
<type>pom</type>
</dependency>
Generuj dokumenty programu Word z szablonu przy użyciu obiektów Java
Aby rozpocząć generowanie raportu, utwórzmy najpierw dokument programu Word, wypełniając szablon wartościami z obiektów Java. Aby zdefiniować szablon dokumentu, utwórz nowy dokument Word, wstaw następujące znaczniki i zapisz go jako dokument DOCX.
<<[s.getName()]>> says: "<<[s.getMessage()]>>."
W powyższym szablonie “s” będzie traktowane jako obiekt klasy Java, który zostanie użyty do wypełnienia tagów. Stwórzmy więc klasę o nazwie Sender z dwoma elementami danych.
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;
}
Teraz nadszedł czas, aby przekazać szablon Word do LINQ Reporting Engine i wygenerować dokument Word na podstawie wartości obiektu Sender. Poniżej przedstawiono kroki generowania dokumentu programu Word:
- Utwórz obiekt Document i zainicjuj go ścieżką szablonu.
- Utwórz i zainicjuj obiekt klasy Sender.
- Utwórz obiekt klasy ReportingEngine.
- Zbuduj raport przy użyciu metody ReportingEngine.buildReport(), która akceptuje szablon dokumentu, źródło danych oraz nazwę źródła danych.
- Zapisz wygenerowany dokument Worda metodą Document.save().
Poniższy przykładowy kod pokazuje, jak wygenerować dokument programu Word z szablonu programu Word przy użyciu wartości obiektu Java.
// Utwórz obiekt Document i zainicjuj za pomocą szablonu DOCX.
Document doc = new Document("template.docx");
// Utwórz obiekt nadawcy.
Sender sender = new Sender("LINQ Reporting Engine", "Hello World");
// Utwórz obiekt ReportingEngine.
ReportingEngine engine = new ReportingEngine();
// Zbuduj raport.
engine.buildReport(doc, sender, "s");
// Zapisz jako dokument Word.
doc.save("word.docx");
Wyjście
Twórz dokumenty programu Word z szablonu przy użyciu danych XML
Pójdźmy teraz o krok dalej i zobaczmy, jak wypełnić szablony programu Word przy użyciu źródła danych XML w nieco złożonym scenariuszu. Poniżej znajduje się źródło danych XML, którego użyjemy do wypełnienia szablonu programu Word.
<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>
W tym scenariuszu użyjemy następujących tagów w dokumencie szablonu dla wielu rekordów w źródle danych XML.
<<foreach [in persons]>>Name: <<[Name]>>, Age: <<[Age]>>, Date of Birth: <<[Birth]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.average(p => p.Age)]>>
Kod Java do generowania dokumentu Word w tym przypadku byłby taki sam i poza przekazaniem obiektu Java jako źródła danych, przekażemy obiekt XmlDataSource w metodzie ReportingEngine.buildReport(). Poniższy przykładowy kod pokazuje, jak utworzyć dokument programu Word przez wypełnienie szablonu dokumentu przy użyciu źródła danych XML w języku Java.
// Utwórz obiekt Document i zainicjuj za pomocą szablonu DOCX.
Document doc = new Document("template.docx");
// Załaduj plik XML
XmlDataSource dataSource = new XmlDataSource("./datasource.xml");
// Utwórz obiekt ReportingEngine.
ReportingEngine engine = new ReportingEngine();
// Zbuduj raport.
engine.buildReport(doc, dataSource, "persons");
// Zapisz jako dokument Word.
doc.save("word.docx");
Wyjście
Generuj dokumenty Word z szablonu przy użyciu danych JSON
Przyjrzyjmy się teraz, jak wygenerować dokument Word z szablonu DOCX przy użyciu źródła danych JSON. Poniżej przedstawiono dane JSON, których użyjemy w tym przykładzie.
[
{
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
}
]
},
]
W tym przykładzie wygenerujemy dokument programu Word zawierający listę klientów pogrupowanych według ich menedżerów. Zgodnie z tym scenariuszem szablon DOCX będzie wyglądał następująco:
<<foreach [in managers]>>Manager: <<[Name]>>
Contracts:
<<foreach [in Contract]>>- <<[Client.Name]>> ($<<[Price]>>)
<</foreach>>
<</foreach>>
Do ładowania źródła danych JSON Aspose.Words udostępnia klasę JsonDataSource. Poniższy przykładowy kod pokazuje, jak utworzyć dokument programu Word na podstawie szablonu przy użyciu źródła danych JSON w języku Java.
// Utwórz obiekt Document i zainicjuj za pomocą szablonu DOCX.
Document doc = new Document("template.docx");
// Załaduj JSON
JsonDataSource dataSource = new JsonDataSource("datasource.json");
// Utwórz obiekt ReportingEngine.
ReportingEngine engine = new ReportingEngine();
// Zbuduj raport.
engine.buildReport(doc, dataSource, "managers");
// Zapisz jako dokument Word.
doc.save("word.docx");
Wyjście
Generuj dokumenty Word z szablonu przy użyciu danych CSV
Na koniec sprawdźmy, jak wygenerować dokument programu Word, wypełniając szablon programu Word przy użyciu następującego źródła danych CSV.
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
W tym przykładzie zostanie użyty następujący szablon programu Word:
<<foreach [in persons]>>Name: <<[Column1]>>, Age: <<[Column2]>>, Date of Birth: <<[Column3]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.average(p => p.Column2)]>>
Do obsługi źródeł danych CSV Aspose.Words oferuje klasę CsvDataSource. Poniższy przykładowy kod pokazuje, jak wygenerować dokument programu Word przy użyciu źródła danych CSV w Javie.
// Utwórz obiekt Document i zainicjuj za pomocą szablonu DOCX.
Document doc = new Document("template.docx");
// Załaduj plik CSV
CsvDataSource dataSource = new CsvDataSource("datasource.csv");
// Utwórz obiekt ReportingEngine.
ReportingEngine engine = new ReportingEngine();
// Zbuduj raport.
engine.buildReport(doc, dataSource, "persons");
// Zapisz jako dokument Word.
doc.save("word.docx");
Wyjście
Dowiedz się więcej o aparacie raportowania LINQ
LINQ Reporting Engine obsługuje szeroką gamę tagów do dynamicznego generowania w pełni funkcjonalnych dokumentów Word w Javie. Możesz dowiedzieć się więcej o tych tagach wraz z ich składnią w tym artykule.
Jeśli masz jakieś pytania lub wątpliwości, możesz pisać na Aspose.Words Forum.