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 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());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值