เมื่อเร็ว ๆ นี้โครงการจะต้องส่งออกเอกสาร Word ฉันทำงานหนักมานานแล้ว ฉันพบว่ามันสะดวกและสะดวกกว่าในการใช้เทมเพลต Freemarker ฉันจะสรุปขั้นตอนสำคัญสำหรับการอ้างอิงของคุณ นี่คือตัวอย่างง่ายๆของการสร้างกระดาษทดสอบ
1. การผลิตแม่แบบ
ก่อนอื่นใช้คำเพื่อสร้างเทมเพลตดังที่แสดงในรูปด้านล่าง:
(โปรดทราบว่ามีตารางด้านบนฉันตั้งค่าเส้นขอบที่มองไม่เห็น) จากนั้นบันทึกเป็นไฟล์ XML จากนั้นใช้เครื่องมือเพื่อเปิดไฟล์ XML มีคนใช้ FirstObject XML Editor รู้สึกว่ามันไม่ดีเท่า Notepad ++ ฉันใช้ Notepad ++ ที่นี่ส่วนใหญ่เป็นเพราะมันมีการเน้นและจับคู่กับองค์ประกอบโดยอัตโนมัติ เอฟเฟกต์มีดังนี้:
สถานที่สีดำด้านบนเป็นสถานที่ที่เราต้องการแทนที่ในภายหลัง ตัวอย่างเช่นหาก Xytitle ถูกแทนที่ด้วย $ {xytitle} คุณควรให้ความสนใจกับตาราง ตัวอย่างเช่นตารางด้านล่างคำถามแบบปรนัยสามารถจัดตำแหน่งได้โดยการค้นหาคำถามแบบปรนัย คู่ของ <w: tr> </w: tr> หมายถึงแถวนั่นคือบันทึก (คำถาม) ที่นี่เราต้องใช้คู่ของ <#list> </#list> เพื่อรวมไว้เพื่อเติมข้อมูลในภายหลัง สำหรับรายละเอียดโปรดดูไวยากรณ์ของหน้า Freemarker ตัวอย่างเช่นคำถามแบบปรนัยที่นี่เรามีสองพฤติกรรมและหนึ่งระเบียนดังนั้นเราจึงต้องการ <##list> </#list> เพื่อรวมสองแถวดังแสดงใน: <#list table1 เป็น plan1> <w: tr> คำถามหมายเลขคำถาม </w: tr> <w: tr> ตัวเลือก </w: tr> </# แทนที่ด้วย $ {plan1.xzn}, $ {plan1.xztest}, $ {plan1.ans1}, $ {plan1.ans2}, $ {plan1.ans3}, $ {plan1.ans4} โปรดทราบว่าตารางที่ 1 และแผน 1 มีชื่ออยู่ที่นี่ ตารางที่ 1 และข้อมูลการเติมที่ตามมาควรใช้ การเปลี่ยนอื่น ๆ นั้นเหมือนกันและผลลัพธ์มีดังนี้:
หลังจากบันทึกแล้วให้แก้ไขชื่อต่อท้ายเป็น FTL และเทมเพลตจะเสร็จสมบูรณ์
2. การใช้งานการเขียนโปรแกรม
ใช้แพ็คเกจ freemarker-2.3.13.jar ที่นี่และรหัสมีดังนี้:
แพคเกจทั่วไป; นำเข้า java.io.bufferedwriter; นำเข้า Java.io.File; นำเข้า java.io.filenotfoundException; นำเข้า Java.io.FileOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.OutputStreamWriter; นำเข้า java.io.unsupportencodingexception; นำเข้า java.io.writer; นำเข้า java.util.map; นำเข้า freemarker.template.configuration; นำเข้า freemarker.template.template; นำเข้า freemarker.template.template; นำเข้า freemarker.template.templateException; คลาสสาธารณะ DocumentHandler {การกำหนดค่าการกำหนดค่าส่วนตัว = null; Public DocumentHandler () {การกำหนดค่า = การกำหนดค่าใหม่ (); configuration.setDefaultEncoding ("UTF-8"); } โมฆะสาธารณะ createDoC (แผนที่ <สตริง, วัตถุ> dataMap, ชื่อไฟล์สตริง) พ่น unsupportencodingexception {// datamap เพื่อกรอกไฟล์ข้อมูลของสคริปต์โมดูโล // ตั้งวิธีการและเส้นทางของอุปกรณ์สคริปต์โมดูโล คุณสามารถให้บริการแบบกลับมาใช้ใหม่ ClassPath และฐานข้อมูลได้ // ที่นี่เทมเพลตของเราอยู่ภายใต้การกำหนดค่าแพ็คเกจเทมเพลต SetClassFortEmplateLoading (this.getClass (), "/เทมเพลต"); เทมเพลต t = null; ลอง {//test.ftl เป็นเทมเพลตที่จะโหลด t = configuration.getTemplate ("fctestpaper.ftl"); } catch (ioexception e) {e.printstacktrace (); } // พา ธ เอกสารเอาต์พุตและไฟล์ชื่อ outfile = ไฟล์ใหม่ (ชื่อไฟล์); นักเขียน out = null; fileOutputStream fos = null; ลอง {fos = ใหม่ fileOutputStream (outfile); OutputStreamWriter owriter = new OutputStreamWriter (FOS, "UTF-8"); // สถานที่แห่งนี้ขาดไม่ได้สำหรับการเข้ารหัสสตรีมมิ่ง เมื่อเรียกแยกจากกันโดยใช้ Main () มันควรจะโอเค แต่ถ้าเป็นคำขอเว็บเพื่อส่งออกเอกสารคำจะไม่เปิดหลังจากการส่งออกและไฟล์แพ็คเกจ XML ไม่ถูกต้อง เหตุผลหลักคือรูปแบบการเข้ารหัสไม่ถูกต้องและไม่สามารถแยกวิเคราะห์ได้ // out = ใหม่ bufferedWriter (ใหม่ outputStreamWriter (ใหม่ fileOutputStream (outfile))); out = ใหม่ bufferedWriter (owriter); } catch (filenotfoundexception e1) {e1.printstacktrace (); } ลอง {t.process (datamap, out); out.close (); fos.close (); } catch (templateException e) {e.printStackTrace (); } catch (ioexception e) {e.printstacktrace (); } //system.out.println("งอก จากนั้นเตรียมการโทรข้อมูลรหัสมีดังนี้:
แพ็คเกจ com.havenliu.document; นำเข้า java.io.unsupportencodingexception; นำเข้า java.util.arraylist; นำเข้า java.util.hashmap; นำเข้า java.util.list; นำเข้า java.util.map; คลาสสาธารณะหลัก { / ** * @param args * @throws unsupportencodingexception * / โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น unsupportencodexception {; แผนที่ <string, Object> datamap = new hashmap <string, object> (); datamap.put ("xytitle", "กระดาษสอบ"); ดัชนี int = 1; // รายการหลายตัวเลือก <แผนที่ <สตริงวัตถุ >> list1 = arrayList ใหม่ <แผนที่ <สตริงวัตถุ >> (); // รายการคำถาม <แผนที่ <สตริง, วัตถุ >> list11 = arrayList ใหม่ <แผนที่ <สตริง, วัตถุ >> (); // คำตอบดัชนี = 1; สำหรับ (int i = 0; i <5; i ++) {map <string, object> map = new hashmap <string, object> (); map.put ("xzn", index + "."); map.put ("XZTest", "() ระบบปฏิบัติการช่วยให้เทอร์มินัลหลายตัวเชื่อมต่อกับโฮสต์หนึ่งในเวลาเดียวกันและผู้ใช้หลายคนสามารถใช้คอมพิวเตอร์แบบโต้ตอบผ่านเทอร์มินัลที่เกี่ยวข้องในเวลาเดียวกัน"); map.put ("ANS1", "A" + ดัชนี); map.put ("ans2", "b" + ดัชนี); map.put ("ANS3", "C" + ดัชนี); map.put ("ans4", "d" + ดัชนี); list1.add (แผนที่); แผนที่ <string, Object> MAP1 = ใหม่ HashMap <String, Object> (); map1.put ("fuck", index + "."); map1.put ("abc", "a" + ดัชนี); list11.add (MAP1); ดัชนี ++; } datamap.put ("table1", list1); datamap.put ("table11", list11); // กรอกรายการ blanks <แผนที่ <string, object >> list2 = arrayList ใหม่ <แผนที่ <สตริง, วัตถุ >> (); รายการ <map <string, object >> list12 = arrayList ใหม่ <แผนที่ <สตริง, วัตถุ >> (); ดัชนี = 1; สำหรับ (int i = 0; i <5; i ++) {map <string, object> map = new hashmap <string, object> (); map.put ("tkn", index + "."); map.put ("tktest", "ระบบปฏิบัติการเป็นซอฟต์แวร์ระบบ ___ ในระบบคอมพิวเตอร์ซึ่งจัดการและควบคุม _________ ในระบบคอมพิวเตอร์"); list2.add (แผนที่); แผนที่ <string, Object> MAP1 = ใหม่ HashMap <String, Object> (); map1.put ("เติม", ดัชนี + "."); map1.put ("def", "การกำหนดเวลากลาง" + ดัชนี); List12.add (MAP1); ดัชนี ++; } datamap.put ("table2", list2); datamap.put ("table12", list12); // รายการคำถามการตัดสิน <แผนที่ <string, object >> list3 = arrayList ใหม่ <แผนที่ <string, object >> (); รายการ <map <string, object >> list13 = arrayList ใหม่ <แผนที่ <สตริง, วัตถุ >> (); ดัชนี = 1; สำหรับ (int i = 0; i <5; i ++) {map <string, object> map = new hashmap <string, object> (); map.put ("pdn", index + "."); map.put ("pdtest", "ไฟร์วอลล์ไฟร์วอลล์คอมโพสิตเป็นจุดแยกระหว่างเครือข่ายภายในและเครือข่ายภายนอกและมีบทบาทในการตรวจสอบและแยกการไหลของการสื่อสารของเลเยอร์แอปพลิเคชันและมักจะรวมกับฟังก์ชั่นของตัวกรอง"); list3.Add (แผนที่); แผนที่ <string, Object> MAP1 = ใหม่ HashMap <String, Object> (); map1.put ("ผู้พิพากษา", ดัชนี + "."); map1.put ("hij", "v" + ดัชนี); List13.Add (MAP1); ดัชนี ++; } datamap.put ("ตารางที่ 3", list3); datamap.put ("table13", list13); // รายการคำถามคำตอบสั้น ๆ <แผนที่ <สตริงวัตถุ >> list4 = arrayList ใหม่ <แผนที่ <สตริงวัตถุ >> (); รายการ <map <string, object >> list14 = arrayList ใหม่ <แผนที่ <สตริง, วัตถุ >> (); ดัชนี = 1; สำหรับ (int i = 0; i <5; i ++) {map <string, object> map = new hashmap <string, object> (); map.put ("jdn", index + "."); map.put ("JDTest", "อธิบายความแตกต่างระหว่างการจัดตารางงานการกำหนดเวลาระดับกลางและการกำหนดเวลากระบวนการและวิเคราะห์ระดับของตัวกำหนดตารางเวลาที่ควรรับผิดชอบต่อปัญหาต่อไปนี้"); list4.add (แผนที่); แผนที่ <string, Object> MAP1 = ใหม่ HashMap <String, Object> (); map1.put ("คำตอบ", ดัชนี + "."); MAP1.put ("XYZ", "อธิบายความแตกต่างระหว่างการจัดตารางงานการกำหนดเวลาระดับกลางและการกำหนดเวลากระบวนการและวิเคราะห์ระดับของตัวกำหนดตารางเวลาที่ควรรับผิดชอบต่อปัญหาต่อไปนี้"); List14.add (MAP1); ดัชนี ++; } datamap.put ("table4", list4); datamap.put ("table14", list14); MDOC MDOC = new MDOC (); mdoc.createdoc (datamap, "e:/outfile.doc"); - โปรดทราบว่าคีย์ในแผนที่ด้านบนจะต้องสอดคล้องกับเทมเพลตมิฉะนั้นจะมีการรายงานข้อผิดพลาด ผลกระทบมีดังนี้:
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น