JAva freemaker生成wordとhtml


1、原理:
データ+ freemaker doc/html.ftlテンプレート----->doc/html
2、具体的な実現:
生成プロセスdocはhtmlと同様であり、以下ではFreemarkがwordドキュメントのマルチマップをエクスポートするために使用する例を挙げる.
 
一、テンプレートの準備
1、wordを使用して新規ドキュメントを作成し、必要なフォーマットに変更し、xmlフォーマットとして保存する
 
2、nopad++を使用して開き、対応するパラメータの位置を見つけ、ループ追加が必要な場所にループを加え、ピクチャ部分のnameとsrcを修正して:w:name="wordml://${img_index}.png"に変更する ,${title}などの対応するパラメータで置き換えます.
 
3、xmlファイルをftlファイルに変更し、テンプレートの準備を完了します.
 
コメント:
この手順でテンプレートを作成すると、複数の図に遭遇すると問題が発生し、問題が多く、解決の深さによって表現形式が異なります.どうせ正確に表現するのは難しい.
何度も検証した結果、正常なwordドキュメントの画像の表示は3つの部分にマークされています.まず画像表示の位置であり、rIdを参照し、画像記憶領域にnameをマークし、wordの先頭部分でrIdをnameに関連付けるので、画像を正しく表示するには3つの部分を変更して対応する必要があります.これはとても頭が痛いことです.
しかし、ネット上では、画像記憶領域の画像データを画像表示領域に配置し、nameを使用してsrcに関連付け、nameがsrc属性と同じように正常に表示されることを保証する方法が見つかった.次のようになります.
name="wordml://${img.title}.png">${img.image}
src="wordml://${img.title}.png"o:title="wordml://${img.title}.png"/>
二、コード部分
ftlファイルをプロジェクト関連ディレクトリの下に配置し、次のコードロジックを行います.
 
private static Configuration configuration = null;
private static final String basePackagePath = "/com/topcom/cms/yuqing/template";

static {
        configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
        //       ,  html  
        configuration.setSharedVariable("cleanHtml", new CleanHtmlMethodModel());
    }


/**
     * @param dataMap        map
     * @param outFile          
     * @param templateName    
     * @throws UnsupportedEncodingException
     */
    public static void processTemplateIntoFile(Map dataMap, File outFile,
                                               String templateName) throws Exception {
        // dataMap           
        //            ,FreeMarker          。   servlet,classpath,     ,
        //           com.havenliu.document.template   
        configuration.setClassForTemplateLoading(FreemarkerUtil.class,
                basePackagePath);
        Template t = null;
        try {
            // test.ftl       
            t = configuration.getTemplate(templateName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Writer out = null;
        FileOutputStream fos = null;
        fos = new FileOutputStream(outFile);
        OutputStreamWriter oWriter = new OutputStreamWriter(fos, "UTF-8");
        //              ,  main()     ,    ,     web        word       ,   XML    。          ,    。
        // out = new BufferedWriter(new OutputStreamWriter(new
        // FileOutputStream(outFile)));
        out = new BufferedWriter(oWriter);
        System.out.println("dataMap:"+dataMap);
        t.process(dataMap, out);
        out.close();
        fos.close();
    }