JAva解析wordテンプレートはxmlで、動的にxmlにデータを埋め込み、最後にwordドキュメントを出力します


JAva解析wordテンプレートはxmlで、動的にxmlにデータを埋め込み、最後にwordドキュメントを出力します
プロジェクトでは、最初はjava Apache poiを使用してwordテンプレートに基づいてwordレポートを生成し、後でフレームワークに低バージョンのpoi 3.0.1があることを発見した.このバージョンが低すぎるため、新バージョンのpoiは古いバージョンのpoiを統合できないため、もう一つの方法を使用した:1、まずwordドキュメントをWord 2003 XMLドキュメント(*.xml)形式のテンプレートファイルとして保存する.2.demo 4 jを使用してxmlにデータを動的に埋め込む3...xmlテンプレートの接尾辞を.docに変更する(最初はjacobを使用していたが、後でこの方法を使うのが便利だと思った)
コードを...
package com.csp.basic.util.word;

import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



/**
 * Created by Rosing on 2019/3/21.
 */
public class ExportDocUtil {

    /**
     * @return
     * @Description:          base64     
     * @Author:
     * @CreateTime:
     */
    public static String getImageStr(String imgFile) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //   
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data).trim();
    }


    public static void main(String[] args) {
        List> datas = new ArrayList>();

        /*Map map = new HashMap();
        map.put("rowNo","  ");
        map.put("targetCode"," ");
        map.put("targetName","   ");
        map.put("specifications", "[email protected]");
        map.put("currency", "   ");
        map.put("unit", "    ");
        map.put("num", "[email protected]");
        map.put("taxIncludedPrice", "   ");
        map.put("taxIncludedAmount", "    ");

        Map map1 = new HashMap();
        map1.put("rowNo","  ");
        map1.put("targetCode"," ");
        map1.put("targetName","   ");
        map1.put("specifications", "[email protected]");
        map1.put("currency", "   ");
        map1.put("unit", "    ");
        map1.put("num", "[email protected]");
        map1.put("taxIncludedPrice", "   ");
        map1.put("taxIncludedAmount", "    ");

        datas.add(map);
        datas.add(map1);*/

        Map map1 = new HashMap();
        map1.put("rowNo", "1");
        map1.put("name", " ");
        map1.put("sex", "   ");
        map1.put("intesting", "[email protected]");
        map1.put("phone", "   ");
        map1.put("remark", "    ");
        datas.add(map1);

        Map map2 = new HashMap();
        map2.put("rowNo", "2");
        map2.put("name", " ");
        map2.put("sex", "   ");
        map2.put("intesting", "[email protected]");
        map2.put("phone", "   ");
        map2.put("remark", "    ");
        datas.add(map2);

        Map map3 = new HashMap();
        map3.put("rowNo", "3");
        map3.put("name", " ");
        map3.put("sex", "   ");
        map3.put("intesting", "[email protected]");
        map3.put("phone", "   ");
        map3.put("remark", "    ");
        datas.add(map3);

        Map map4 = new HashMap();
        map4.put("rowNo", "4");
        map4.put("name", " ");
        map4.put("sex", "   ");
        map4.put("intesting", "[email protected]");
        map4.put("phone", "   ");
        map4.put("remark", "    ");
        datas.add(map4);

        Map map5 = new HashMap();
        map5.put("rowNo", "5");
        map5.put("name", " ");
        map5.put("sex", "   ");
        map5.put("intesting", "[email protected]");
        map5.put("phone", "   ");
        map5.put("remark", "    ");
        datas.add(map5);

        List> listMap = new ArrayList>();
        Map mapph = new HashMap();
        mapph.put("eiName", "        ");
        mapph.put("address", "      ");
        mapph.put("representative", "  ");
        mapph.put("TableRemark", "         ,     ,    : -0mm/+2mm ");
        mapph.put("mobile", "         ");
        mapph.put("phone", "         1 ");
        mapph.put("fax", "2222");
        listMap.add(mapph);

        List> url_imgs = new ArrayList>();
        Map imgUrl = new HashMap();
        imgUrl.put("picture", "G:\\poi\\srm\\     \\     \\  \\IMG_9954_mr1461893871549.jpg");
        imgUrl.put("picture2", "G:\\poi\\srm\\     \\     \\  \\IMG20160418194124.jpg");
        url_imgs.add(imgUrl);


        // ExportDocUtil.exportDoc(datas,listMap,url_imgs,"G:\\poi\\srm\\     \\    .doc","G:\\poi\\srm\\     \\123.doc","164","121");

        exportDoc2Table(datas, listMap, "G:\\poi\\   \\moudue.doc", "G:\\poi\\   \\111.doc");

        /*String base = getImageStr("D:\\picture\\picture\\DCIM\\DCIM\\IMG20160419143404.jpg");
        GenerateImage(base,"");*/

        // System.out.println(getImageStr("G:\\poi\\srm\\picture.jpg"));

        /*try {
            addImg2Word(listMap);
        } catch (DocumentException e) {
            e.printStackTrace();
        }*/

        //GetTagContent();
        //   fiee.createDoc();


      /*
        try {
            changePatagraphText(listMap);
        } catch (DocumentException e) {
            e.printStackTrace();
        }*/

    }

    /**
     *   {***}     
     *
     * @return
     */
    public static Map GetTagContent(Document doc) {
        Map map = new HashMap();
        int num = 0;
        try {

            List nodeList = doc.selectNodes("//w:tbl//w:tr//w:tc//w:p//w:r//w:t");
            if (nodeList.size() > 0) {

                for (Element node : nodeList) {
                    String Text = "";
                    String regEx = "\\{.+?\\}";
                    Pattern pattern = Pattern.compile(regEx);
                    Matcher matcher = pattern.matcher(node.getText());//       {****}

                    if (matcher.find()) {
                        String valText = node.getText();
                        int beginIndex = valText.indexOf("{");
                        int endIndex = valText.indexOf("}");
                        int length = valText.length();

                        Text = valText.substring(1, endIndex);
                        map.put(String.valueOf(num), Text);

                        num++;
                        // System.out.println(node.getText() + "--------------------------------------------------------------");
                    }
                    //  System.out.println(node.getName()+":"+node.valueOf("@name")+","+node.valueOf("@age") + node.getText());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;

    }

    /**
     *      {***}
     *
     * @param doc
     */
    public static void deleteElement2tr(Document doc) {
        List nodeList = doc.selectNodes("//w:tbl//w:tr");

        if (nodeList != null && nodeList.size() > 0) {
            nodeList.get(1).getParent().remove(nodeList.get(1));
        }

       /* if (nodeList.size() > 0) {
            Iterator childIter=nodeList.get(1).elementIterator();
            while(childIter.hasNext()) {
                Element childElement = childIter.next();
                String tag = childElement.getName();
                element.getParent().remove(element);
            }
        }*/
    }


    /**
     *          ${***}
     */
    public static void changePatagraphText(List> Paragraph, Document doc) {

        List elements = doc.selectNodes("//w:t");

        for (Element element : elements) {
            String name = element.getText();
            String regEx = "\\$\\{.+?\\}";
            Pattern pattern = Pattern.compile(regEx);
            Matcher matcher = pattern.matcher(name);//       ${****}
            //  System.out.println(element.getText() + "--------------------");

            if (matcher.find()) {
                for (Map map : Paragraph) {
                    int endIndex = name.indexOf("}");
                    String key = name.substring(2, endIndex);

                    if (map.containsKey(key)) {
                        element.setText(map.get(key).toString());
                    }
                }
            }

        }
    }

    /**
     *         ,Document doc
     */
    public static void addImg2Word(List> list_imgUrl, Document doc, String Width, String Height) throws DocumentException {
        int num_index = 0;  //          ,   

        List parent_elements = new ArrayList();   //   w:p   

        List sect_element = doc.selectNodes("//wx:sect");//body     ,       

        List elements = doc.selectNodes("//w:t");
        Element element_parent = null;

        for (Element element : elements) {
            String name = element.getText();
            String regEx = "\\{\\{.+?\\}\\}";
            Pattern pattern = Pattern.compile(regEx);
            Matcher matcher = pattern.matcher(name);//       ${****}

            if (matcher.find()) {
                for (Map map : list_imgUrl) {
                    int endIndex = name.indexOf("}}");
                    String key = name.substring(2, endIndex);

                    if (map.containsKey(key)) {


                        // System.out.println(key + "--------------------");
                        String img_url = getValueBykey(key, map);//    
                        String base64_img = getImageStr(img_url);   //base64

                        element_parent = element.getParent().getParent();//       ===> w:p

                        Element element_parent_parent = element_parent.getParent();////   w:p    ===> wx:sect

                        List list = element_parent_parent.content();//   wx:sect       
                        int Element_index = list.indexOf(element_parent);//    \

                        //22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
                        Element r_element = element.getParent();      //=====>w:r
                        /*Iterator childIter=r_element.elementIterator();
                        while(childIter.hasNext())
                        {
                            Element childElement=childIter.next();
                            String tag=childElement.getName();
                            if("name".equals(tag)&&name.equals(childElement.getText()))
                            {
                                element.getParent().remove(element);
                            }
                        }*/


                        //222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

                        //!!!!!!!====================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                        //Document doc1 = DocumentHelper.createDocument();

                     /*   Element p_element = element_parent_parent.addElement("w:p");
                        p_element.addAttribute("wsp:rsidR","00DD7127");
                        p_element.addAttribute("wsp:rsidRDefault","00F857E9");*/
                       /* p_element.addNamespace("w","http://schemas.microsoft.com/office/word/2003/wordml");
                        p_element.addNamespace("v","http://schemas.microsoft.com/office/word/2003/wordml");
                        p_element.addNamespace("o","http://schemas.microsoft.com/office/word/2003/wordml");*/

                        //------------------------------------------
                       /* Element prpelement1 = p_element.addElement("w:pPr");
                        Element rement = prpelement1.addElement("w:rPr");
                        rement.addElement("w:rFonts").addAttribute("w:hint","fareast");*/
                        //-----------------------------------------


                        //----------------------------        --------------------
                      /*  Element r_element = p_element.addElement("w:r");
                        r_element.addAttribute("wsp:rsidRPr","0090705D");*/

                        Element rpr_element = r_element.addElement("w:rPr");
                        rpr_element.addElement("w:noProof");

                        Element pic_element = r_element.addElement("w:pict");
                        Element shapetype_element = pic_element.addElement("v:shapetype");

                        shapetype_element.addAttribute("id", "_x0000_t75");
                        shapetype_element.addAttribute("coordsize", "21600,21600");
                        shapetype_element.addAttribute("o:spt", "75");
                        shapetype_element.addAttribute("o:preferrelative", "t");
                        shapetype_element.addAttribute("path", "m@4@5l@4@11@9@11@9@5xe");
                        shapetype_element.addAttribute("filled", "f");
                        shapetype_element.addAttribute("stroked", "f");

                        Element stroke_element = shapetype_element.addElement("v:stroke");
                        stroke_element.addAttribute("joinstyle", "miter");

                        //------------------
                        Element formulas_element = shapetype_element.addElement("v:formulas");
                        Element formulas_element1 = formulas_element.addElement("v:f");
                        formulas_element1.addAttribute("eqn", "if lineDrawn pixelLineWidth 0");

                        Element formulas_element2 = formulas_element.addElement("v:f");
                        formulas_element2.addAttribute("eqn", "sum @0 1 0");

                        Element formulas_element3 = formulas_element.addElement("v:f");
                        formulas_element3.addAttribute("eqn", "sum 0 0 @1");

                        Element formulas_element4 = formulas_element.addElement("v:f");
                        formulas_element4.addAttribute("eqn", "prod @2 1 2");

                        Element formulas_element5 = formulas_element.addElement("v:f");
                        formulas_element5.addAttribute("eqn", "prod @3 21600 pixelWidth");

                        Element formulas_element6 = formulas_element.addElement("v:f");
                        formulas_element6.addAttribute("eqn", "prod @3 21600 pixelHeight");

                        Element formulas_element7 = formulas_element.addElement("v:f");
                        formulas_element7.addAttribute("eqn", "sum @0 0 1");

                        Element formulas_element8 = formulas_element.addElement("v:f");
                        formulas_element8.addAttribute("eqn", "prod @6 1 2");

                        Element formulas_element9 = formulas_element.addElement("v:f");
                        formulas_element9.addAttribute("eqn", "prod @7 21600 pixelWidth");

                        Element formulas_element10 = formulas_element.addElement("v:f");
                        formulas_element10.addAttribute("eqn", "sum @8 21600 0");

                        Element formulas_element11 = formulas_element.addElement("v:f");
                        formulas_element11.addAttribute("eqn", "prod @7 21600 pixelHeight");

                        Element formulas_element12 = formulas_element.addElement("v:f");
                        formulas_element12.addAttribute("eqn", "sum @10 21600 0");

                        //---------------------------------------------------------------------------------------------
                        Element path_element = shapetype_element.addElement("v:path");
                        path_element.addAttribute("o:extrusionok", "f");
                        path_element.addAttribute("gradientshapeok", "t");
                        path_element.addAttribute("o:connecttype", "rect");

                        Element lock_element = shapetype_element.addElement("o:lock");
                        lock_element.addAttribute("v:ext", "edit");
                        lock_element.addAttribute("aspectratio", "t");


                        //==============================      ==============================================
                        Element data_element = pic_element.addElement("w:binData");
                        data_element.addAttribute("w:name", "wordml://0200000" + String.valueOf(num_index + 1) + ".jpg");
                        data_element.addAttribute("xml:space", "preserve");
                        data_element.setText(base64_img);


                        Element shape_element = pic_element.addElement("v:shape");
                        shape_element.addAttribute("id", "   " + String.valueOf(num_index + 1));
                        shape_element.addAttribute("o:spid", "_x0000_i1025");
                        shape_element.addAttribute("type", "#_x0000_t75");
                        shape_element.addAttribute("style", "width:" + Width + "pt;height:" + Height + "pt;visibility:visible;mso-wrap-style:square");

                        Element imagedata_element = shape_element.addElement("v:imagedata");
                        imagedata_element.addAttribute("src", "wordml://0200000" + String.valueOf(num_index + 1) + ".jpg");
                        imagedata_element.addAttribute("o:title", "");

                        //<<<<<<<<<<<<<<<<<<<<<<<<<<<<===================================================================================!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                        //list.add(Element_index + 1, p_element);

                        parent_elements.add(element_parent);
                        r_element.remove(element);

                        // element_parent_parent.remove(element_parent);

                        num_index++;
                    }
                }
            }
        }

        //     {{******}}
       /* if (parent_elements != null && parent_elements.size() > 0) {
            for (Element element1:parent_elements) {
                sect_element.get(0).remove(element1);
            }
        }*/

        Attribute p_attr_rsidR = element_parent.attribute("rsidR");
        if (p_attr_rsidR != null) {
            element_parent.remove(p_attr_rsidR);
        }
        Attribute p_attr_rsidRDefault = element_parent.attribute("rsidRDefault");
        if (p_attr_rsidRDefault != null) {
            element_parent.remove(p_attr_rsidRDefault);
        }
        Attribute p_attr_rsidP = element_parent.attribute("rsidP");
        if (p_attr_rsidP != null) {
            element_parent.remove(p_attr_rsidP);
        }


        element_parent.addAttribute("wsp:rsidR", "007938E7");
        element_parent.addAttribute("wsp:rsidRDefault", "00A72728");

        List Listelement = element_parent.selectNodes("w:pPr");    //    ,             ====>begin

        if (Listelement != null && Listelement.size() > 0) {

            Element element_pPr = Listelement.get(0);

            List element_spacing = element_pPr.selectNodes("w:spacing");

            if (element_spacing != null && element_spacing.size() > 0) {
                element_pPr.remove(element_spacing.get(0));
            }

            List element_rPrs = element_pPr.selectNodes("w:rPr");

            if (element_rPrs != null && element_rPrs.size() > 0) {

                Element element_rPr = element_rPrs.get(0);

                List element_child = element_rPr.selectNodes("w:lang");

                if (element_child != null && element_child.size() > 0) {
                    element_rPr.remove(element_child.get(0));
                }
                element_rPr.addElement("w:rFonts").addAttribute("w:hint", "fareast");

            }
            //end  ==============================================================================================


        }
    }


    /**
     *   word  ,    
     *
     * @param table_datas       
     * @param Paragraph         
     * @param Img_Urls          
     * @param inputDocPath      
     * @param outputDocPath     
     * @param Img_Width         
     * @param Img_Height        
     */
    public static void exportDoc(List> table_datas, List> Paragraph, List> Img_Urls, String inputDocPath, String outputDocPath,
                                 String Img_Width, String Img_Height) {
        try {

            // String getLastsuffix = inputDocPath.substring(inputDocPath.lastIndexOf(".") + 1); //    

            File file = new File(inputDocPath); //        
            String filename = file.getAbsolutePath();
            String filePath = "";
            if (filename.indexOf(".") >= 0) {
                filePath = filename.substring(0, filename.lastIndexOf("."));
            }

            if (!file.getParentFile().exists()) { //          
                file.getParentFile().mkdirs(); //    

            }
            file.renameTo(new File(filePath + ".xml")); //  

            // ChangeWord2Xml.doc2Xml(inputDocPath,inputDocPath);

            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File(filePath + ".xml"));
            List elementList = doc.selectNodes("//w:tbl");

            if (elementList != null && elementList.size() > 0) {//      

                Element element = elementList.get(0);//       ,       --------------------------------------------------------------------------------------------------------------------

                int num = 0;
                Map map = GetTagContent(doc);

                for (Map data : table_datas) {

                    Element create_tr = element.addElement("w:tr");
                    create_tr.addAttribute("wsp:rsidR", "00497D9D");
                    create_tr.addAttribute("wsp:rsidRPr", "002A2AC8");
                    create_tr.addAttribute("wsp:rsidTr", "002A2AC8");//  

                    for (int i = 0; i < map.size(); i++) {

                        //---------------111111111111111111111-----------------------------------------
                        Element create_tc1 = create_tr.addElement("w:tc");
                        Element create_tc1_tcPr = create_tc1.addElement("w:tcPr");
                        //tcpr     ,    
                        Element create_tc1_tcPr_tcW = create_tc1_tcPr.addElement("w:tcW");
                        create_tc1_tcPr_tcW.addAttribute("w:w", "800");
                        create_tc1_tcPr_tcW.addAttribute("w:type", "dxa");
                        Element create_tc1_tcPr_shd = create_tc1_tcPr.addElement("w:shd");
                        create_tc1_tcPr_shd.addAttribute("w:val", "clear");
                        create_tc1_tcPr_shd.addAttribute("w:color", "auto");
                        create_tc1_tcPr_shd.addAttribute("w:fill", "auto");
                        Element create_tc1_tcPr_vAlign = create_tc1_tcPr.addElement("w:vAlign");
                        create_tc1_tcPr_vAlign.addAttribute("w:val", "center");

                        Element create_tc1_p = create_tc1.addElement("w:p");
                        create_tc1_p.addAttribute("wsp:rsidR", "00E84EF7");
                        create_tc1_p.addAttribute("wsp:rsidRPr", "002A2AC8");
                        create_tc1_p.addAttribute("wsp:rsidRDefault", "00E84EF7");
                        create_tc1_p.addAttribute("wsp:rsidP", "002A2AC8");

                        Element create_tc1_p_r = create_tc1_p.addElement("w:r");
                        create_tc1_p_r.addAttribute("wsp:rsidRPr", "002A2AC8");

                        Element create_tc1_p_r_t = create_tc1_p_r.addElement("w:t");
                        create_tc1_p_r_t.setText(getValueBykey(map.get(String.valueOf(num)).toString(), data));
                        num++;
                    }
                    num = 0;
                }
            }
            deleteElement2tr(doc);//
            changePatagraphText(Paragraph, doc);//        
            addImg2Word(Img_Urls, doc, Img_Width, Img_Height);//      

            File file_xml = new File(filePath + ".xml"); //        
            String fileabsolutePath = file_xml.getAbsolutePath();//  ------->  .xml    .doc
            String filePath2Xml = "";
            if (fileabsolutePath.indexOf(".") >= 0) {
                filePath2Xml = fileabsolutePath.substring(0, fileabsolutePath.lastIndexOf("."));
            }

            if (!file.getParentFile().exists()) { //          
                file.getParentFile().mkdirs(); //    
            }

            file_xml.renameTo(new File(filePath2Xml + ".doc")); //  

            //    
            OutputFormat format = new OutputFormat();
            format.setEncoding("UTF-8");

            XMLWriter writer = new XMLWriter(new FileOutputStream(new File(outputDocPath)), format);

            writer.write(doc);
            writer.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private static String getValueBykey(String key, Map map) {
        String returnValue = "";
        if (key != null) {
            try {
                returnValue = map.get(key) != null ? map.get(key).toString() : "";
            } catch (Exception e) {
                // TODO: handle exception
                //System.out.println("key:"+key+"***"+e);
                returnValue = "";
            }

        }
        return returnValue;
    }


    /**
     *   word   (         )
     *
     * @param table_datas       
     * @param Paragraph         
     * @param inputDocPath        
     * @param outputDocPath       
     */
    public static void exportDoc2Table(List> table_datas, List> Paragraph, String inputDocPath, String outputDocPath) {
        try {

            // String getLastsuffix = inputDocPath.substring(inputDocPath.lastIndexOf(".") + 1); //    
            File file = new File(inputDocPath); //        

            String filename = file.getAbsolutePath();
            String filePath = "";
            if (filename.indexOf(".") >= 0) {
                filePath = filename.substring(0, filename.lastIndexOf("."));
            }

            if (!file.getParentFile().exists()) { //          
                file.getParentFile().mkdirs(); //    

            }
            file.renameTo(new File(filePath + ".xml")); //  

            // ChangeWord2Xml.doc2Xml(inputDocPath,inputDocPath);

            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File(filePath + ".xml"));
            List elementList = doc.selectNodes("//w:tbl");

            if (elementList != null && elementList.size() > 0) {  //      

                Element element = elementList.get(0);//       ,       --------------------------------------------------------------------------------------------------------------------

                int num = 0;
                int lent_tr = 0;
                Map map = GetTagContent(doc);

                for (Map data : table_datas) {
                    Element create_tr = element.addElement("w:tr");
                    create_tr.addAttribute("wsp:rsidR", "00497D9D");
                    create_tr.addAttribute("wsp:rsidRPr", "002A2AC8");
                    create_tr.addAttribute("wsp:rsidTr", "002A2AC8");//  

                    for (int i = 0; i < map.size(); i++) {

                        if (i != map.size() - 1) {
                            //---------------111111111111111111111-----------------------------------------
                            Element create_tc1 = create_tr.addElement("w:tc");
                            Element create_tc1_tcPr = create_tc1.addElement("w:tcPr");
                            //tcpr     ,    
                            Element create_tc1_tcPr_tcW = create_tc1_tcPr.addElement("w:tcW");
                            create_tc1_tcPr_tcW.addAttribute("w:w", "800");
                            create_tc1_tcPr_tcW.addAttribute("w:type", "dxa");

                            Element create_tc1_tcPr_shd = create_tc1_tcPr.addElement("w:shd");
                            create_tc1_tcPr_shd.addAttribute("w:val", "clear");
                            create_tc1_tcPr_shd.addAttribute("w:color", "auto");
                            create_tc1_tcPr_shd.addAttribute("w:fill", "auto");
                            Element create_tc1_tcPr_vAlign = create_tc1_tcPr.addElement("w:vAlign");
                            create_tc1_tcPr_vAlign.addAttribute("w:val", "center");

                            Element create_tc1_p = create_tc1.addElement("w:p");
                            create_tc1_p.addAttribute("wsp:rsidR", "00E84EF7");
                            create_tc1_p.addAttribute("wsp:rsidRPr", "002A2AC8");
                            create_tc1_p.addAttribute("wsp:rsidRDefault", "00E84EF7");
                            create_tc1_p.addAttribute("wsp:rsidP", "002A2AC8");

                            Element create_tc1_p_r = create_tc1_p.addElement("w:r");
                            create_tc1_p_r.addAttribute("wsp:rsidRPr", "002A2AC8");

                            Element create_tc1_p_r_t = create_tc1_p_r.addElement("w:t");
                            create_tc1_p_r_t.setText(getValueBykey(map.get(String.valueOf(num)).toString(), data));
                        } else {
                            Element create_tc1 = create_tr.addElement("w:tc");
                            Element create_tc1_tcPr = create_tc1.addElement("w:tcPr");

                            Element create_vmerge = create_tc1_tcPr.addElement("w:vmerge");

                            if (lent_tr == 0) {
                                create_vmerge.addAttribute("w:val", "restart");
                            }

                            Element create_tc1_tcPr_tcW = create_tc1_tcPr.addElement("w:tcW");
                            create_tc1_tcPr_tcW.addAttribute("w:w", "800");
                            create_tc1_tcPr_tcW.addAttribute("w:type", "dxa");

                            Element create_tc1_tcPr_shd = create_tc1_tcPr.addElement("w:shd");
                            create_tc1_tcPr_shd.addAttribute("w:val", "clear");
                            create_tc1_tcPr_shd.addAttribute("w:color", "auto");
                            create_tc1_tcPr_shd.addAttribute("w:fill", "auto");

                            Element create_tc1_p = create_tc1.addElement("w:p");
                            create_tc1_p.addAttribute("wsp:rsidR", "007D28E2");
                            create_tc1_p.addAttribute("wsp:rsidRPr", "00293C83");
                            create_tc1_p.addAttribute("wsp:rsidRDefault", "007D28E2");
                            create_tc1_p.addAttribute("wsp:rsidP", "00293C83");

                            Element create_tc1_p_r = create_tc1_p.addElement("w:pPr");
                            Element element_pPr_w = create_tc1_p_r.addElement("w:jc");
                            element_pPr_w.addAttribute("w:val", "left");


                            if (lent_tr == 0) {
                                Element create_r = create_tc1_p.addElement("w:r");
                                create_r.addAttribute("wsp:rsidRPr", "00293C83");


                                Element element_rPr = create_r.addElement("w:rPr");

                                Element element_rFonts = element_rPr.addElement("w:rFonts");
                                element_rFonts.addAttribute("w:ascii", "  ");
                                element_rFonts.addAttribute("w:fareast", "  ");
                                element_rFonts.addAttribute("w:h-ansi", "  ");
                                element_rFonts.addAttribute("w:cs", "  ");
                                element_rFonts.addAttribute("w:hint", "fareast");

                                Element element_font = element_rPr.addElement("wx:font");
                                element_font.addAttribute("wx:val", "  ");

                                Element element_kern = element_rPr.addElement("w:kern");
                                element_kern.addAttribute("w:val", "0");

                                Element element_sz = element_rPr.addElement("w:sz");
                                element_sz.addAttribute("w:val", "24");

                                Element element_szcs = element_rPr.addElement("w:sz-cs");
                                element_szcs.addAttribute("w:val", "24");

                                Element element_wt = create_r.addElement("w:t");
                                element_wt.setText("${TableRemark}");
                            }
                        }

                        num++;
                    }
                    num = 0;
                    lent_tr++;
                }

                //---------------  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-----------------------------------------
                Element create_tr = element.addElement("w:tr");
                create_tr.addAttribute("wsp:rsidR", "00497D9D");
                create_tr.addAttribute("wsp:rsidRPr", "002A2AC8");
                create_tr.addAttribute("wsp:rsidTr", "002A2AC8");//  

                for (int i = 0; i < table_datas.get(0).size(); i++) {
                    Element create_tc1 = create_tr.addElement("w:tc");
                    Element create_tc1_tcPr = create_tc1.addElement("w:tcPr");
                    //tcpr     ,    
                    Element create_tc1_tcPr_tcW = create_tc1_tcPr.addElement("w:tcW");
                    create_tc1_tcPr_tcW.addAttribute("w:w", "1041");
                    create_tc1_tcPr_tcW.addAttribute("w:type", "dxa");
                    Element create_tc1_tcPr_shd = create_tc1_tcPr.addElement("w:shd");
                    create_tc1_tcPr_shd.addAttribute("w:val", "clear");
                    create_tc1_tcPr_shd.addAttribute("w:color", "auto");
                    create_tc1_tcPr_shd.addAttribute("w:fill", "auto");
                    Element create_tc1_tcPr_vAlign = create_tc1_tcPr.addElement("w:vAlign");
                    create_tc1_tcPr_vAlign.addAttribute("w:val", "center");

                    Element create_tc1_p = create_tc1.addElement("w:p");
                    create_tc1_p.addAttribute("wsp:rsidR", "00E84EF7");
                    create_tc1_p.addAttribute("wsp:rsidRPr", "002A2AC8");
                    create_tc1_p.addAttribute("wsp:rsidRDefault", "00E84EF7");
                    create_tc1_p.addAttribute("wsp:rsidP", "002A2AC8");

                    Element create_tc1_p_r = create_tc1_p.addElement("w:r");
                    create_tc1_p_r.addAttribute("wsp:rsidRPr", "002A2AC8");

                    Element create_tc1_p_r_t = create_tc1_p_r.addElement("w:t");

                    if (i == 0) {
                        create_tc1_p_r_t.setText("  ");
                    }

                }

            }
            deleteElement2tr(doc);//
            changePatagraphText(Paragraph, doc);//        


            File file_xml = new File(filePath + ".xml"); //        
            String fileabsolutePath = file_xml.getAbsolutePath();//  ------->  .xml    .doc
            String filePath2Xml = "";
            if (fileabsolutePath.indexOf(".") >= 0) {
                filePath2Xml = fileabsolutePath.substring(0, fileabsolutePath.lastIndexOf("."));
            }

            if (!file.getParentFile().exists()) { //          
                file.getParentFile().mkdirs(); //    
            }

            file_xml.renameTo(new File(filePath2Xml + ".doc")); //  

            //    
            OutputFormat format = new OutputFormat();
            format.setEncoding("UTF-8");

            XMLWriter writer = new XMLWriter(new FileOutputStream(new File(outputDocPath)), format);

            writer.write(doc);
            writer.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static boolean GenerateImage(String imgStr, String photoname) {
        //          Base64       
        //      
        if (imgStr == null)
            return false;


        BASE64Decoder decoder = new BASE64Decoder();
        try {
            //Base64  
            byte[] b = decoder.decodeBuffer(imgStr);
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    //      
                    b[i] += 256;
                }
            }
            //  jpeg  
           /* String imagePath= Config.getUploadPhysicalPath();
            //System.currentTimeMillis()
            //      
            String imgFilePath = imagePath+photoname;*/
            OutputStream out = new FileOutputStream("G:\\poi\\test.jpg");
            out.write(b);
            out.flush();
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }


}