POI 使用替换字符方式进行模板生成word

1、Word生成

package com.tepper.common.util;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;


/**
 * Word写入器
 * 
 * DocWriter
 * 
 * @author 潘广伟
 * @Email [email protected]
 * @Date 2015-3-25 上午8:53:17
 * 
 * @version 1.0.0
 * 
 */
public class DocWriter {
       
    /**
     * 根据模板生成word文档
     * createByTemplate
     * 
     * @param srcPath
     * @param map
     * @return 
     * @exception 
     * @since  1.0.0
     */
    public static XWPFDocument createByTemplate(String srcPath,Map map) {
        XWPFDocument document = null;
        try {
            document = new XWPFDocument(POIXMLDocument.openPackage(srcPath));
            Iterator it = document.getTablesIterator();
            while (it.hasNext()) {
                XWPFTable table = (XWPFTable) it.next();
                int rcount = table.getNumberOfRows();
                for (int i = 0; i < rcount; i++) {
                    XWPFTableRow row = table.getRow(i);
                    List cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        for (Entry e : map.entrySet()) {
                            if (cell.getText().equals(e.getKey())) {
                                /**
                                 * 清空原来的字符
                                 */
                                cell.removeParagraph(0);

                                /**
                                 * 新的字符及样式
                                 */
                                XWPFParagraph paragraph = new XWPFParagraph(cell.getCTTc().addNewP(), cell);
                                paragraph.setAlignment(ParagraphAlignment.LEFT);
                                XWPFRun run = paragraph.createRun();
                                run.setFontSize(14);
                                run.setFontFamily("宋体");
                                run.setText(e.getValue());
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return document;
    }
}

2、通过response导出

Map map = new HashMap();
            map.put("${invoiceaccepter}", request.getParameter("invoiceaccepter"));
            map.put("${amountPrice}",request.getParameter("amountPrice")+"万");
            map.put("${invoicenum}","NO."+request.getParameter("invoicenum"));
            map.put("${count}",request.getParameter("count"));
            map.put("${invoiceTime}",request.getParameter("invoiceTime"));
            String srcPath = request.getSession().getServletContext().getRealPath("/") + "print_temp/invoice.docx";
            XWPFDocument document =  DocWriter.createByTemplate(srcPath, map);
            response.setHeader("Content-disposition", "attachment;filename=ReturnReceipt.doc");  
            document.write(response.getOutputStream());

你可能感兴趣的:(java)