利用freemarker模板导出简历中xml里面的标签

过程不在赘述,在word转换成xml格式以后,里面的占位符 多多少少会有被分割的情况,如果不懂一些标签,直接修改难免会破坏一些文档格式,这里总结一下一些标签的作用。

段落字体:

  <w:t>:字符串,文字内容,

如:<w:t>这是文字</w:t>

如:<w:t xml:space="preserve">       </w:t>           <#-- xml:space="preserve"从字面上理解是保持空格 -->

  <w:r>:表示一个样式串,指明它包括的文本的显示样式,如文本属性加粗、下划线、倾斜的分割,内含w:rsidRPr属性

  <w:rpr>:是<w:r>标签内的标签,对文本属性进行修饰,与<w:ppr>类似

  <w:p>:表示段落和html中的<p>标签类似

如:<#-- 下面是一段粗体 -->

<w:r>
   <w:rPr> 
      <w:b w:val="on"/>
   </w:rPr> 
   <w:t> 这是粗体</w:t>
</w:r>

  看完这段代码,应该大概懂点结构了,其中<w:b w:val=”on”> 表示该格式串种的文本为粗体,而<w:p>一般是<w:r>的外层。

再举一例:

<w:p>

  <w:pPr>

    <w:rPr>

      <w:jc w:val="center"/>                 <#-- 这句话表示段落对齐方式 -->

      <w:spacing  w:line="600" w:lineRule="auto"/>                         <#-- 设置行距,要进行运算,要用数字除以240,如此处为600/240=2.5倍行距 -->

    </w:rPr>

  </w:pPr>

  <w:r w:rsidRPr="00F2468A">

    <w:rPr>

      <w:b w:val="on"/>                       <#-- 粗体 -->
      <w:sz w:val="40"/><w:szCs w:val="40"/>                   <#-- 字体尺寸为是40除2等于20 -->

      <w:rFronts w:ascii="宋体" w:hAnsi="宋体" w:hint="esatAsia"/>

    </w:rPr>

    <w:t>${wordtext1}</w:t>                         <#-- ${wordtext1}是freemarker变量,一般是字符串,用于输出,这个可以参考freemarker文档 -->

  </w:r>

</w:p>

  段属性包含在<w:pPr></w:pPr>中,文本格式包含在<w:rPr></w:rPr>中,这儿的Pr是property的意思

 

  页面设置:

如:

<#-- 设置了页的宽,高,和页的各边距。各项的值均是英寸乘1440得出 -->

<w:body>
  
<w:sectPr>
      <w:pgSz w:w="12240" w:h="15840"/>
      <w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/>
  </w:sectPr>

</w:body>

再如:

<#--此处设置页眉页脚-->

<w:sectPr wsp:rsidR="002C452C">
    <w:hdr w:type="odd" >
        <w:p>
            <w:pPr>
                <w:pStyle w:val="Header"/>
            </w:pPr>
            <w:r>
                <w:t>这是页眉</w:t>
            </w:r>
        </w:p>
    </w:hdr>
    <w:ftr w:type="odd">
        <w:p>
            <w:pPr>
                <w:pStyle w:val="Footer"/>
            </w:pPr>
            <w:r>
                <w:t>这是页脚</w:t>
            </w:r>
        </w:p>
    </w:ftr>

</w:sectPr>

再再如:

</w:body>

  <#-- 文档的视图 -->

  <w:docPr>
      <w:view w:val="print"/><w:zoom w:percent="100"/>
  </w:docPr>

</w:wordDocument>

docPr,就是document property的意思,表示文档的视图是“print”,视图比例100%

 

  表格:

直接看例子吧:

<w:tbl>
<w:tblPr><w:tblW w:w="0" w:type="auto"/>
<w:tblInd w:w="737" w:type="dxa"/>
<w:tblBorders>
<w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:insideV w:val="single" w:sz="4" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblLayout w:type="fixed"/><w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid><w:gridCol w:w="2635"/><w:gridCol w:w="3372"/><w:gridCol w:w="2074"/></w:tblGrid>

<w:tr w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidTr="00D074CF">
<w:trPr><w:trHeight w:val="566"/></w:trPr>
<w:tc><w:tcPr><w:tcW w:w="2000" w:type="dxa"/></w:tcPr>
<w:p w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidRDefault="00F2468A" w:rsidP="00E9655B">
<w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:szCs w:val="21"/></w:rPr></w:pPr>
<w:r w:rsidRPr="00F2468A"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:szCs w:val="21"/></w:rPr>
<w:t>第一列</w:t></w:r>
</w:p></w:tc>

<w:tc><w:tcPr><w:tcW w:w="1200" w:type="dxa"/></w:tcPr>
<w:p w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidRDefault="00F2468A" w:rsidP="00E9655B">
<w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:szCs w:val="21"/></w:rPr></w:pPr>
<w:r w:rsidRPr="00F2468A"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:szCs w:val="21"/></w:rPr>
<w:t>第二列</w:t></w:r>
</w:p></w:tc>

<w:tc><w:tcPr><w:tcW w:w="3200" w:type="dxa"/></w:tcPr>
<w:p w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidRDefault="00F2468A" w:rsidP="00E9655B">
<w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:szCs w:val="21"/></w:rPr></w:pPr>
<w:r w:rsidRPr="00F2468A"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:szCs w:val="21"/></w:rPr>
<w:t>第三列</w:t></w:r>
</w:p></w:tc>
</w:tr>

<#list table3 as item3>
<w:tr w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidTr="00D074CF">
<w:trPr><w:trHeight w:val="566"/></w:trPr>
<w:tc><w:tcPr><w:tcW w:w="2000" w:type="dxa"/></w:tcPr>
<w:p w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidRDefault="00F2468A" w:rsidP="00E9655B">
<w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:szCs w:val="21"/></w:rPr></w:pPr>
<w:r w:rsidRPr="00F2468A"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:szCs w:val="21"/></w:rPr>
<w:t>${item3.tablecolumn1}</w:t></w:r>
</w:p></w:tc>
<w:tc><w:tcPr><w:tcW w:w="1200" w:type="dxa"/></w:tcPr>
<w:p w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidRDefault="00F2468A" w:rsidP="00E9655B">
<w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:szCs w:val="21"/></w:rPr></w:pPr>
<w:r w:rsidRPr="00F2468A"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:szCs w:val="21"/></w:rPr>
<w:t>${item3.tablecolumn2}</w:t></w:r>
</w:p></w:tc>
<w:tc><w:tcPr><w:tcW w:w="3200" w:type="dxa"/></w:tcPr>
<w:p w:rsidR="00F2468A" w:rsidRPr="00F2468A" w:rsidRDefault="00F2468A" w:rsidP="00E9655B">
<w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:szCs w:val="21"/></w:rPr></w:pPr>
<w:r w:rsidRPr="00F2468A"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:szCs w:val="21"/></w:rPr>
<w:t>${item3.tablecolumn3}</w:t></w:r>
</w:p></w:tc>
</w:tr>

</#list>
</w:tbl>

 

  最后,写一个完整的xml例子吧:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no"
xml:space="preserve">

<w:body>
<w:p>
<w:pPr>
<w:jc w:val="left"/>
<w:spacing  w:line="240" w:lineRule="auto"/>
</w:pPr>
<w:r>
<w:rPr> 
<w:sz w:val="24"/><w:szCs w:val="24"/>
<w:rFonts   w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
</w:rPr> 
<w:t>Niu don't like Red or Blue! It seems that </w:t>
</w:r>
<w:r>
<w:rPr> 
<w:sz w:val="48"/><w:szCs w:val="48"/>
<w:rFonts   w:ascii="Arial" w:eastAsia="Arial" w:hAnsi="Arial" />
</w:rPr> 
<w:t>Hello world!</w:t>
</w:r>
</w:p>
<w:p>

<w:sectPr wsp:rsidR="002C452C">
<w:pgSz w:w="12240" w:h="15840"/>
<w:pgMar w:top="1526.4" w:right="3254.4" w:bottom="2966.4" w:left="1670.4" w:header="720" w:footer="720" w:gutter="0"/>
<w:hdr w:type="odd" >
<w:p>
<w:pPr>
<w:pStyle w:val="Header"/>
</w:pPr>
<w:r>
<w:t>Header</w:t>
</w:r>
</w:p>
</w:hdr>
<w:ftr w:type="odd">
<w:p>
<w:pPr>
<w:pStyle w:val="Footer"/>
</w:pPr>
<w:r>
<w:t>Footer</w:t>
</w:r>
</w:p>
</w:ftr>
</w:sectPr>
</w:body>

<w:docPr>
<w:view w:val="print"/><w:zoom w:percent="100"/>
</w:docPr>
</w:wordDocument>

 

  一个应用级别的Word文档绝对不仅这些内容,更详细的内容需要参考MS Office SDK。

还有一些关于图片的代码:

图片下载以及图片转base64编码:

package com.zyzp.web.front.index.controller.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class DownImage {
    public static void main(String[] args) {
        File dstFile = new File("C:\\Users\\Administrator\\Desktop\\test.jpg");
        try {
            URL url = new URL("http://img.hr001.xin/2017/05/13/default/2017051315522676195308.png");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            InputStream is = conn.getInputStream();
            saveFile(is, dstFile);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void saveFile(InputStream is,File dstFile){
        FileOutputStream fos = null;
        File parentFile = dstFile.getParentFile();
        if(!parentFile.exists()){
            parentFile.mkdirs();
        }
        try {
            fos = new FileOutputStream(dstFile);
            byte[] buff = new byte[1024 * 4];
            int len;
            while((len = is.read(buff)) != -1){
                fos.write(buff, 0, len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try{
                if(is != null){
                    is.close();
                }
                if(fos != null){
                    fos.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
}

package com.zyzp.web.front.index.controller.util;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import sun.misc.BASE64Encoder;

public class ImageToBase64 {
    public static String getImageString(String imageUrl) throws IOException {  
        InputStream in = null;  
        byte[] data = null;  
        try {  
            
            URL url = new URL(imageUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            in = conn.getInputStream();
           
            data = new byte[in.available()];  
            in.read(data);  
            in.close();  
        } catch (IOException e) {  
            throw e;  
        } finally {  
            if(in != null) in.close();  
        }  
        BASE64Encoder encoder = new BASE64Encoder();  
        return data != null ? encoder.encode(data) : "";  
   }  
}

 补充,第一种方式只能转10kb以下的图片,现在补充一种:

package com.zyzp.web.front.index.controller.util;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import sun.misc.BASE64Encoder;

public class ImageToBase64a {

    public  static String getImgToBase64(String _path) {
        String path = _path;
        int BYTE_SIZE = 1;
        int SAVE_SIZE = 1024;
        byte[] buff = new byte[BYTE_SIZE]; // 每次读的缓存
        byte[] save = new byte[SAVE_SIZE]; // 保存前缓存
        byte[] imgByte = null;
        String imgStr = null;
        BufferedInputStream bf = null;
        URL url = null;
        HttpURLConnection httpUrl;
        List<byte[]> byteList = null;
        try {
            byteList = new ArrayList<byte[]>();
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();

            url = new URL(path);
            httpUrl = (HttpURLConnection) url.openConnection();
            bf = new BufferedInputStream(httpUrl.getInputStream());
            int i = 0;
            while (bf.read(buff) != -1) { // 一个字节一个字节读
                save[i] = buff[0];
                if (i == SAVE_SIZE - 1) { // 达到保存长度时开始保存
                    // 返回Base64编码过的字节数组字符串
                    byteList.add(save);
                    save = new byte[SAVE_SIZE];
                    i = 0;
                } else {
                    i++;
                }
            }
            // 最后这段如果没达到保存长度,需要把前面的保存下来
            if (i > 0) {
                // 返回Base64编码过的字节数组字符串
                byteList.add(save);
            }
            int length = byteList.size();
            imgByte = new byte[SAVE_SIZE * (length - 1) + i];
            for (int j = 0; j < byteList.size() - 1; j++) {
                byte[] temp = byteList.get(j);
                System.arraycopy(temp, 0, imgByte, j * SAVE_SIZE, SAVE_SIZE);
            }
            if (i > 0) {
                System.arraycopy(save, 0, imgByte, (length - 1) * SAVE_SIZE, i);
            }
            imgStr = encoder.encode(imgByte);

            httpUrl.disconnect();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                bf.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return imgStr;
    }

}

 

posted on 2017-05-18 10:35  小马的IT备忘录  阅读(465)  评论(0编辑  收藏  举报

导航