首页 > 其他 > 详细

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

时间:2015-03-25 12:11:48      阅读:563      评论:0      收藏:0      [点我收藏+]

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 p_3er@qq.com
 * @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<String, String> 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<XWPFTableCell> cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        for (Entry<String, String> 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<String, String> map = new HashMap<String, String>();
            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());

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

原文:http://blog.csdn.net/jrainbow/article/details/44619257

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!