Vor kurzem muss ein Projekt ein Word -Dokument exportieren. Ich habe lange hart gearbeitet. Ich fand, dass es bequemer und bequemer ist, Freemarker -Vorlagen zu verwenden. Ich werde die wichtigsten Schritte für Ihre Referenz zusammenfassen. Hier ist ein einfaches Beispiel für die Testpapiergenerierung.
1. Erzeugung von Vorlagen
Verwenden Sie zunächst ein Wort, um eine Vorlage zu erstellen, wie in der folgenden Abbildung gezeigt:
(Beachten Sie, dass es oben eine Tabelle vorhanden ist. Ich setze den Rand unsichtbar.) Speichern Sie sie dann als XML -Datei und verwende das Tool, um die XML -Datei zu öffnen. Jemand verwendet den FirstObject XML -Editor, um das Gefühl zu haben, dass es nicht so gut ist wie Notepad ++. Ich verwende hier Notepad ++, vor allem, weil es hervorgehoben wird und automatisch mit Elementen gepaart wird. Der Effekt ist wie folgt:
Der schwarze Ort oben ist im Grunde der Ort, den wir später ersetzen möchten. Wenn Xytitle beispielsweise durch $ {xytitle} ersetzt wird, sollten Sie der Tabelle große Aufmerksamkeit schenken. Beispielsweise kann die folgende Multiple-Choice-Fragen positioniert werden, indem Sie nach Multiple-Choice-Fragen suchen. Ein Paar <w: Tr> </w: Tr> repräsentiert eine Zeile, dh einen Datensatz (eine Frage). Hier müssen wir ein Paar <#List> </#List> verwenden, um es einzuschließen, um die Daten anschließend auszufüllen. Weitere Informationen finden Sie in der Grammatik der Freemarker -Seite. Zum Beispiel haben wir hier Multiple-Choice-Fragen zwei Verhaltensweisen und einen Datensatz, also müssen wir <#List> </#List> zwei Zeilen einfügen, wie in: <#List Tabelle 1 als Plan1> <w: Tr> Frage-Nummer-Frage. $ {plan1.xzn}, $ {plan1.xztest}, $ {plan1.ans1}, $ {plan1.ans2}, $ {plan1.ans3}, $ {plan1.ans4}, dass Tabelle 1 und Plan1 hier benannt werden. Tabelle 1 und nachfolgende Fülldaten sollten verwendet werden. Andere Ersetzungen sind gleich, und die Ergebnisse sind wie folgt:
Ändern Sie nach dem Speichern den Suffixnamen in FTL, und die Vorlage ist abgeschlossen.
2. Programmierungsimplementierung
Das Freemarker-2.3.13.jar-Paket wird hier verwendet, und der Code lautet wie folgt:
Paket gemeinsam; Import Java.io.BufferedWriter; Import Java.io.file; importieren java.io.filenotfoundException; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren java.io.outputStreamwriter; importieren java.io.unsupportedenCodingException; Import Java.io.Writer; import Java.util.map; Freemarker.template.Configuration importieren; freeMarker.template.template importieren; freeMarker.template.template importieren; freemarker.template.templateException importieren; public class documentHandler {private configuration configuration = null; public documentHandler () {configuration = new configuration (); configuration.setDefaultCoding ("utf-8"); } public void createcoc (MAP <String, Object> Datamap, String -Dateiname) löst nicht unterstütztEcodingException {// datamap aus, um die Datendatei des Modulo -Skripts auszufüllen. Sie können das Laden von Klassenpfad und Datenbank neu bedienen. // Hier befindet sich unsere Vorlage unter der Vorlagepaketkonfiguration.setClassForforMPlatEloading (this.getClass (), "/Vorlage"); Vorlage T = NULL; try {//test.ftl ist die vorladende Vorlage t = configuration.gettemplate ("fcTestpaper.ftl"); } catch (ioException e) {e.printstacktrace (); } // Ausgabe des Dokumentenpfads und der Namensdatei outfile = neue Datei (Dateiname); Schriftsteller out = null; FileOutputStream fos = null; try {fos = new FileOutputStream (Outfile); OutputStreamwriter owriter = neuer outputStreamWriter (FOS, "UTF-8"); // Dieser Ort ist für das Codieren von Streaming unverzichtbar. Bei separat mit Main () aufgerufen, sollte es in Ordnung sein. Wenn es sich jedoch um eine Webanforderung handelt, um das Wort Dokument zu exportieren, wird nach dem Export nicht geöffnet, und die Paket -XML -Datei ist falsch. Der Hauptgrund ist, dass das Codierungsformat falsch ist und nicht analysiert werden kann. // out = new bufferedWriter (neuer Ausgangsstreamwriter (neuer FileOutputStream (Outfile)); out = neuer bufferterWriter (Owriter); } catch (FilenotFoundException e1) {e1.printstacktrace (); } try {t.process (Datamap, out); out.close (); fos.close (); } catch (templateException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } //System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Erstellen Sie dann den Datenaufruf, der Code lautet wie folgt:
Paket com.havenliu.document; importieren java.io.unsupportedenCodingException; Import Java.util.ArrayList; import Java.util.hashMap; importieren java.util.list; import Java.util.map; public class main { / ** * @param args * @throws UnsupportedenCodingException * / public static void main (String [] args) löst nicht unterstütztenCodingException {; Karte <string, Object> datamap = new HashMap <String, Object> (); Datamap.put ("xytitle", "Prüfpapier"); int index = 1; // Multiple -Choice -Liste <map <String, Objekt >> list1 = new ArrayList <map <String, Objekt >> (); // Frageliste <map <String, Objekt >> list11 = new ArrayList <map <String, Objekt >> (); // Antwort index = 1; für (int i = 0; i <5; i ++) {map <String, Objekt> map = new HashMap <String, Object> (); map.put ("xzn", index + "."); MAP.PUT ("XZTEST", "() -Betriebssystem ermöglicht es, dass mehrere Terminals gleichzeitig mit einem Host verbunden werden, und mehrere Benutzer können den Computer gleichzeitig über ihre jeweiligen Terminals interaktiv verwenden."). map.put ("Ans1", "a" + Index); map.put ("ANS2", "B" + Index); map.put ("ANS3", "C" + Index); map.put ("ANS4", "D" + Index); list1.add (map); Karte <string, Objekt> map1 = new HashMap <String, Object> (); map1.put ("ficken", index + "."); map1.put ("ABC", "a" + Index); list11.add (MAP1); Index ++; } datamap.put ("Tabelle1", List1); Datamap.put ("Tabelle11", List11); // Füllen Sie die Leerzeichenliste <map <String, Objekt >> list2 = new ArrayList <map <String, Objekt >> () aus; Liste <map <string, objekt >> list12 = new ArrayList <map <String, Objekt >> (); Index = 1; für (int i = 0; i <5; i ++) {map <String, Objekt> map = new HashMap <String, Object> (); map.put ("tkn", index + "."); map.put ("tktest", "Betriebssystem ist eine ___ System -Software ________ im Computersystem, die _________ im Computersystem verwaltet und steuert."); list2.add (map); Karte <string, Objekt> map1 = new HashMap <String, Object> (); map1.put ("fill", index + "."); map1.put ("def", "Zwischenplanung" + index); list12.add (MAP1); Index ++; } datamap.put ("Tabelle2", List2); Datamap.put ("Tabelle12", List12); // Beurteilungsfrageliste <map <String, Objekt >> list3 = new ArrayList <map <String, Objekt >> (); Liste <map <String, Objekt >> list13 = new ArrayList <map <String, Objekt >> (); Index = 1; für (int i = 0; i <5; i ++) {map <String, Objekt> map = new HashMap <String, Object> (); map.put ("pdn", index + "."); MAP.PUT ("PDTEST", "Composite Firewall Firewall ist der Isolationspunkt zwischen dem internen Netzwerk und dem externen Netzwerk und spielt die Rolle der Überwachung und Isolierung des Kommunikationsflusss der Anwendungsschicht und wird häufig auch mit der Funktion der Filter kombiniert."). List3.Add (Karte); Karte <string, Objekt> map1 = new HashMap <String, Object> (); map1.put ("Richter", Index + "."); map1.put ("hij", "v" + index); List13.Add (MAP1); Index ++; } datamap.put ("Tabelle3", list3); Datamap.put ("Tabelle13", List13); // kurze Antwort Frageliste <map <String, Objekt >> list4 = new ArrayList <map <String, Objekt >> (); Liste <map <String, Objekt >> list14 = new ArrayList <map <String, Objekt >> (); Index = 1; für (int i = 0; i <5; i ++) {map <String, Objekt> map = new HashMap <String, Object> (); map.put ("jdn", index + "."); map.put ("jdTest", "Beschreiben Sie den Unterschied zwischen Jobplanung, Zwischenplanung und Prozessplanung und Analyse, welcher Zeitplanungsgrad für die folgenden Probleme verantwortlich sein sollte."). List4.Add (Karte); Karte <string, Objekt> map1 = new HashMap <String, Object> (); map1.put ("Antwort", Index + "."); MAP1.PUT ("XYZ", "Beschreiben Sie den Unterschied zwischen Jobplanung, Zwischenplanung und Prozessplanung und Analyse, welcher Zeitplanungsgrad für die folgenden Probleme verantwortlich sein sollte."). list14.Add (MAP1); Index ++; } datamap.put ("Tabelle4", list4); Datamap.put ("Tabelle14", List14); Mdoc mdoc = new mdoc (); mdoc.createdoc (Datamap, "e: /outfile.doc"); }} Beachten Sie, dass der Schlüssel in der obigen Karte der Vorlage entsprechen muss, andernfalls wird ein Fehler gemeldet. Die Effekte sind wie folgt:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.