Baru -baru ini, sebuah proyek harus mengekspor dokumen Word. Saya telah bekerja keras untuk waktu yang lama. Saya menemukan bahwa lebih nyaman dan nyaman untuk menggunakan template freemarker. Saya akan meringkas langkah -langkah kunci untuk referensi Anda. Berikut adalah contoh sederhana dari pembuatan kertas uji.
1. Produksi Template
Pertama gunakan kata untuk membuat templat, seperti yang ditunjukkan pada gambar di bawah ini:
(Perhatikan bahwa ada tabel di atas, saya mengatur perbatasan yang tidak terlihat) lalu simpan sebagai file XML, dan kemudian gunakan alat untuk membuka file XML. Seseorang menggunakan FirstObject XML Editor untuk merasa bahwa itu tidak sebagus Notepad ++. Saya menggunakan Notepad ++ di sini, terutama karena memiliki menyoroti dan secara otomatis berpasangan dengan elemen. Efeknya adalah sebagai berikut:
Tempat hitam di atas pada dasarnya adalah tempat yang ingin kami ganti nanti. Misalnya, jika Xytitle digantikan oleh $ {xytitle}, Anda harus sangat memperhatikan tabel. Misalnya, tabel di bawah pertanyaan pilihan ganda dapat diposisikan dengan mencari pertanyaan pilihan ganda. Sepasang <w: tr> </w: tr> mewakili baris, yaitu rekaman (pertanyaan). Di sini kita perlu menggunakan sepasang <#list> </##list> untuk memasukkannya untuk selanjutnya mengisi data. Untuk detailnya, silakan merujuk ke tata bahasa halaman Freemarker. Misalnya, di sini pertanyaan pilihan ganda, kami memiliki dua perilaku dan satu catatan, jadi kami memerlukan <#list> </##list> untuk memasukkan dua baris, seperti yang ditunjukkan dalam: <#list Table1 sebagai Plan1> <W: TR> PERTANYAAN PERTANYAAN PERTANYAAN </w: TR> <W: TR> Opsi </w: tr> </#####, dan kemudian temukan xzn, anz, anz, an. Itu dengan $ {plan1.xzn}, $ {Plan1.xztest}, $ {Plan1.ans1}, $ {Plan1.Ans2}, $ {Plan1.ans3}, $ {Plan1.Ans4}, Perhatikan bahwa Table1 dan Plan1 dinamai di sini. Table1 dan data pengisian selanjutnya harus digunakan. Penggantian lainnya sama, dan hasilnya adalah sebagai berikut:
Setelah menabung, ubah nama akhiran menjadi FTL, dan template selesai.
2. Implementasi Pemrograman
Paket Freemarker-2.3.13.jar digunakan di sini, dan kodenya adalah sebagai berikut:
paket umum; impor java.io.bufferedwriter; impor java.io.file; impor java.io.filenotfoundException; impor java.io.fileoutputStream; impor java.io.ioException; impor java.io.outputStreamWriter; impor java.io.unsupportedencodingException; impor java.io.writer; impor java.util.map; impor freemarker.template.configuration; impor freemarker.template.template; impor freemarker.template.template; impor freemarker.template.templateException; Dokumen Public Classhandler {configuration configuration private = null; public documentHandler () {configuration = new configuration (); configuration.setDefaultEncoding ("UTF-8"); } public void dibuat (peta <String, Object> DATAMAP, String FileName) melempar UnsupportedEncodingException {// datamap untuk mengisi file data dari skrip modulo // Atur metode dan jalur perangkat skrip Modulo, Freemarker mendukung beberapa metode pemuatan templat. Anda dapat melayani ulang, classpath, dan pemuatan database. // Di sini template kami ditempatkan di bawah konfigurasi paket template.setClassFortemplateading (this.getClass (), "/template"); Template t = null; coba {//test.ftl adalah templat yang akan dimuat t = configuration.gettemplate ("fctestpaper.ftl"); } catch (ioException e) {e.printstacktrace (); } // output path dokumen dan nama file outfile = file baru (nama file); Penulis keluar = null; FileOutputStream fos = null; coba {fos = fileoutputStream baru (outfile); OutputStreamWriter owriter = outputStreamWriter baru (fos, "UTF-8"); // Tempat ini sangat diperlukan untuk pengkodean streaming. Ketika dipanggil secara terpisah menggunakan main (), itu harus OK, tetapi jika itu adalah permintaan web untuk mengekspor dokumen Word tidak akan dibuka setelah diekspor, dan file paket XML salah. Alasan utamanya adalah bahwa format pengkodean tidak benar dan tidak dapat diuraikan. // out = BufferedWriter baru (OutputStreamWriter baru (FileOutputStream baru (OutFile))); out = New BufferedWriter (OWRITER); } catch (FileNotFoundException E1) {e1.printstacktrace (); } coba {t.process (datamap, out); out.close (); fos.close (); } catch (templateException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } //System.out.println("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Kemudian siapkan panggilan data, kodenya adalah sebagai berikut:
paket com.havenliu.document; impor java.io.unsupportedencodingException; impor java.util.arraylist; impor java.util.hashmap; impor java.util.list; impor java.util.map; kelas publik utama { / ** * @param args * @throws UnsportedencodingException * / public static void main (string [] args) melempar UnsupportedEncodingException {; Peta <String, Object> datamap = HashMap baru <String, Object> (); datamap.put ("xytitle", "kertas ujian"); indeks int = 1; // Daftar Pilihan Ganda <Peta <String, Object >> List1 = ArrayList baru <peta <String, Object >> (); // Daftar pertanyaan <peta <String, Object >> List11 = ArrayList baru <peta <String, Object >> (); // Jawab indeks = 1; untuk (int i = 0; i <5; i ++) {peta <string, object> peta = new HashMap <string, object> (); peta.put ("xzn", index + "."); Map.put ("xztest", "() sistem operasi memungkinkan beberapa terminal untuk dihubungkan ke satu host secara bersamaan, dan banyak pengguna dapat menggunakan komputer secara interaktif melalui terminal masing -masing pada saat yang sama."); peta.put ("ans1", "a" + index); map.put ("ans2", "b" + index); map.put ("ans3", "c" + index); map.put ("ans4", "d" + index); list1.add (peta); Peta <String, Object> MAP1 = HashMap baru <String, Object> (); map1.put ("fuck", index + "."); map1.put ("ABC", "A" + Index); list11.add (MAP1); indeks ++; } datamap.put ("table1", list1); datamap.put ("Table11", List11); // Isi daftar kosong <peta <string, objek >> list2 = new arraylist <peta <string, objek >> (); Daftar <peta <string, objek >> list12 = arraylist baru <peta <string, object >> (); indeks = 1; untuk (int i = 0; i <5; i ++) {peta <string, object> peta = new HashMap <string, object> (); peta.put ("tkn", index + "."); Map.put ("tktest", "sistem operasi adalah ___ sistem perangkat lunak____________ dalam sistem komputer, yang mengelola dan mengontrol _________ dalam sistem komputer."); daftar2.add (peta); Peta <String, Object> MAP1 = HashMap baru <String, Object> (); map1.put ("isi", indeks + "."); map1.put ("def", "penjadwalan menengah" + indeks); List12.Add (MAP1); indeks ++; } datamap.put ("table2", list2); datamap.put ("table12", list12); // daftar pertanyaan penilaian <peta <string, object >> list3 = new arraylist <peta <string, objek >> (); Daftar <peta <string, objek >> list13 = arraylist baru <peta <string, object >> (); indeks = 1; untuk (int i = 0; i <5; i ++) {peta <string, object> peta = new HashMap <string, object> (); Map.put ("PDN", Index + "."); Map.put ("PDTest", "Firewall Composite Firewall adalah titik isolasi antara jaringan internal dan jaringan eksternal, dan memainkan peran pemantauan dan mengisolasi aliran komunikasi lapisan aplikasi, dan juga sering dikombinasikan dengan fungsi filter."); daftar3.add (peta); Peta <String, Object> MAP1 = HashMap baru <String, Object> (); map1.put ("juri", index + "."); map1.put ("hij", "v" + index); List13.Add (MAP1); indeks ++; } datamap.put ("table3", list3); datamap.put ("table13", list13); // Daftar Pertanyaan Jawaban Singkat <Peta <String, Object >> List4 = ArrayList baru <peta <String, Object >> (); Daftar <peta <string, objek >> list14 = arraylist baru <peta <string, object >> (); indeks = 1; untuk (int i = 0; i <5; i ++) {peta <string, object> peta = new HashMap <string, object> (); peta.put ("jdn", index + "."); Map.put ("JDTest", "jelaskan perbedaan antara penjadwalan pekerjaan, penjadwalan menengah dan penjadwalan proses, dan menganalisis tingkat penjadwal mana yang harus bertanggung jawab atas masalah berikut."); daftar4.add (peta); Peta <String, Object> MAP1 = HashMap baru <String, Object> (); map1.put ("Jawaban", index + "."); Map1.put ("xyz", "jelaskan perbedaan antara penjadwalan pekerjaan, penjadwalan menengah dan penjadwalan proses, dan menganalisis tingkat penjadwal mana yang harus bertanggung jawab atas masalah berikut."); List14.Add (MAP1); indeks ++; } datamap.put ("table4", list4); datamap.put ("table14", list14); Mdoc mdoc = mdoc baru (); mdoc.createdoc (datamap, "e: /outfile.doc"); }} Perhatikan bahwa kunci dalam peta di atas harus sesuai dengan templat, jika tidak, kesalahan akan dilaporkan. Efeknya adalah sebagai berikut:
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.