Freemarkerでwordドキュメントをエクスポートする


1、wordでエクスポートするテンプレートを書いて、動的に修正する必要がある内容を***に置き換えます.wordにピクチャを追加する必要がある場合は、ピクチャ占有を追加してxml形式に保存し、接尾辞名を.ftlに変更します.
注意:(1)テンプレートを作成するときは、エクスポートされたwordドキュメントがWord 2003で開かないという問題を回避するために、Microsoft Office Word 2003を使用します.
(2)wordフォーマットの問題にも注意する.ワードエクスポートに成功した後にフォーマットの不調和などの問題を発見したら、新しく来たことしかありません.
(3)ピクチャ占有を加える場合は、できるだけ50 K未満のピクチャを選択し、ピクチャの大きさと位置を調整してください.小さな画像を選択したのは、xmlファイルが大きすぎて開くのが遅くなったり、詰まったりするのを避けるためです.
2、Firstobject free XML editorでftlファイルを開き、Toolsの下のIndent【またはショートカットキーF 8を押す】を選択してファイル内容をフォーマットします.左はftlのドキュメント構造、右はドキュメント内容です.
注:フォーマット後のコードをより明確にするには、tool->preferencesでIndentをTabsに設定する必要があります.
3、ftlで内容を動的に変更する必要がある箇所をfreemarkerの標識に変更します.実はMapのkey、例えば${year}です.
4、ピクチャ占有が加わった場所では、base 64符号化されたコードが次のように表示されます.
${grade.photo}
base 64のコードをたとえば${image}に置き換えると、次のようになります.
${grade.photo}
注意:「>${grade.photo}<」このカッコの間には、スペース、tab、改行などの他の記号は追加できません.
ループが必要な場合は、次の操作を行います.
  <#list grade.list as student>...,
具体的にはDemoをご覧ください.
5、表示が入れ替わったら、テンプレートは終わります.
特に注意:wordでftlテンプレートファイルを開かないでください.そうしないとxmlの内容が変化し、前の仕事が無駄になります.
 
処理コードは次のとおりです.
     /**
      * @  dataMap      Key            
      */
     public void create(Map<String, Object> dataMap) throws Exception {
        Configuration configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
        //     com.canyou.template   ,  classpath  
        configuration.setClassForTemplateLoading(this.getClass(),
               "/com/canyou/template");
        Template t = configuration.getTemplate("test.ftl");//         
        File outFile = new File(docPath);
        if (!outFile.exists()) {
            outFile.createNewFile();
        }
        Writer out = new BufferedWriter(new OutputStreamWriter(
               new FileOutputStream(outFile), "utf-8"));
        t.process(dataMap, out);
     }

呼び出されたコード:
public static void main(String[] args) {
        Map<String, Object> dataMap = new HashMap<String, Object>();//           
        Grade grade = new Grade();
        grade.setSchool("    ");
        grade.setMajor("      ");
        grade.setYear(2011);
        grade.setAdviser("  ");
        grade.setNo("0102");
        grade.setPhoto(getFileStream("D:\\  \\http_imgload.jpg"));  
 
        List<Student> list = new ArrayList<Student>();
        for (int i = 0; i < 100; i++) {
            Student stu = new Student();
            stu.setNo("0102" + i);
            stu.setName("test" + i);
            stu.setSex(i % 2 == 1 ? " " : " ");
            stu.setAge(20 + i % 5);
            stu.setAddress("            1 ");
            list.add(stu);
        }

附:Firstobject free XML editorダウンロードアドレス:http://www.firstobject.com/dn_editor.htm
     freemarker 公式サイト:http://freemarker.org/