精华内容
下载资源
问答
  • poi字符替换部分失败 public class Xwp07Test { public static void searchAndReplace(String srcPath, String destPath, Map, String> map) { try { XWPFDocument document = new ...
  • poi docx 字符,图片替换

    2019-08-12 01:29:19
    NULL 博文链接:https://zl-go.iteye.com/blog/2267814
  • 1.业务需求 在word的文件中,当生成一些模板时我们,我们经常使用“${**}...同时,我们需要用poi提供的XWPFRun的接口来替换文本。为了使用替换后的文本可以的换行的操作。 小编编写了一个工具类,希望对大家有用 ...

    1.业务需求

    在word的文件中,当生成一些模板时我们,我们经常使用“${**}”来标志需要替换的文件,如${name}就是要将name的字段替换成真实的姓名。所以我们需要用正则表达式来寻找到广本的内容是否包含了“${}”。正则表达式是:\\{.+?\\}。同时,我们需要用poi提供的XWPFRun的接口来替换文本。为了使用替换后的文本可以的换行的操作。

    小编编写了一个工具类,希望对大家有用

    package csyl.custom.demo;

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;

    import org.apache.poi.POIXMLDocument;
    import org.apache.poi.xwpf.usermodel.PositionInParagraph;
    import org.apache.poi.xwpf.usermodel.TextSegement;
    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;

    /**
     * @author wsg
     * @创建时间: 2019年6月25日下午6:26:21
     */
    public class WordUtils {
        public static void replaceDocx(String readPath, String outPath, Map<String, String> map) {
            // 解析docx模板并获取document对象
            XWPFDocument document;
            try {
                document = new XWPFDocument(POIXMLDocument.openPackage(readPath));
                // 修改表格对象
                modifyTable(document, map);
                // 修改内容
                modifyText(document, map);
                try {
                    storeDocx(document, outPath);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public static void modifyTable(XWPFDocument document, Map<String, String> map) {
            Iterator<XWPFTable> itTable = document.getTablesIterator();
            while (itTable.hasNext()) {
                XWPFTable table = (XWPFTable) itTable.next();
                replaceTableText(document, map, table);
            }
        }

        public static void replaceTableText(XWPFDocument document, Map<String, String> map, XWPFTable table) {
            // 获取table的行数
            int count = table.getNumberOfRows();
            for (int i = 0; i < count; i++) {
                XWPFTableRow row = table.getRow(i);
                List<XWPFTableCell> cells = row.getTableCells();
                for (XWPFTableCell cell : cells) {
                    List<XWPFParagraph> paragraphs = cell.getParagraphs();
                    for (int j = 0; j < paragraphs.size(); j++) {
                        XWPFParagraph xwpfParagraph = paragraphs.get(j);
                        List<XWPFRun> runs = paragraphs.get(j).getRuns();
                        for (Map.Entry<String, String> replPair : map.entrySet()) {
                            String oldText = replPair.getKey();
                            String newText = replPair.getValue();
                            replaceText(xwpfParagraph, runs, oldText, newText);
                        }
                    }
                }

            }

        }

        public static void modifyText(XWPFDocument document, Map<String, String> map) {
            List<XWPFParagraph> paragraphs = document.getParagraphs();
            for (XWPFParagraph xwpfParagraph : paragraphs) {
                // 文档下面的runs标签
                List<XWPFRun> runs = xwpfParagraph.getRuns();
                for (Map.Entry<String, String> replPair : map.entrySet()) {
                    String oldText = replPair.getKey();
                    String newText = replPair.getValue();
                    replaceText(xwpfParagraph, runs, oldText, newText);
                }
            }
        }

        private static void replaceText(XWPFParagraph xwpfParagraph, List<XWPFRun> runs, String oldText, String newText) {
            // 获取文本段
            TextSegement tSegement = xwpfParagraph.searchText(oldText, new PositionInParagraph());
            if (tSegement != null) {
                // 得到对应字符串出现的首个runs标签
                int beginRun = tSegement.getBeginRun();
                // 得到对应字符串出现的末尾runs标签
                int endRun = tSegement.getEndRun();
                // 在同一个runs标签
                StringBuilder b = new StringBuilder();
                for (int runPos = beginRun; runPos <= endRun; runPos++) {
                    XWPFRun run = runs.get(runPos);
                    b.append(run.getText(0));
                }
                String connectedRuns = b.toString();
                String replaced = connectedRuns.replace(oldText, newText);
                XWPFRun partOne = runs.get(beginRun);
                partOne.setText(replaced, 0);
                for (int runPos = beginRun + 1; runPos <= endRun; runPos++) {
                    XWPFRun partNext = runs.get(runPos);
                    partNext.setText("", 0);
                }
                if (endRun <= runs.size()) {
                    replaceText(xwpfParagraph, runs, oldText, newText);
                }

            }
        }

        public static void storeDocx(XWPFDocument document, String outPath) throws Exception {
            File file = new File(outPath.trim());
            OutputStream os = new FileOutputStream(file);
            // 把document输出
            document.write(os);
            document.close();
            os.close();
        }

    }

     

    展开全文
  • 1、Word生成package ...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.xwp

    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来做,这里特别强调一点,实现该功能所需的jar包最好是:poi-scratchpad-3.8-beta4-20110826.jar 和 poi-3.8-beta4-20110826.jar 否则会导出一个损坏文件。 word文档中的预设字符:代码(系统是...

    最近在公司开发个小功能,要求是基于需求提供的word文档模板来生成规定的word文档。
    想了一下,就用了poi来做,这里特别强调一点,实现该功能所需的jar包最好是:poi-scratchpad-3.8-beta4-20110826.jar 和 poi-3.8-beta4-20110826.jar 否则会导出一个损坏文件。
    word文档中的预设字符:这里写图片描述

    代码(系统是ssh的):

    1. public void download(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) throws
        Exception { 
            String path = ExcelUtil.class.getResource("").getPath();//存放模板文件的路径,可手动拼接字符串 
            path += "refundApply.doc";//模板文件 
            String filePath =
            request.getRealPath("/").replace("\\", "/") + "fileTemp/";//生成文件的路径,也可手动拼接
            String fileName = "生成的文件名.doc";//生成文件的文件名
            response.setHeader("Content-Disposition",
            "attachment;fileName="+java.net.URLEncoder.encode(fileName,FileUtils.Copy(path, filePath + fileName); 
            File file = new File(filePath + fileName); 
            FileInputStream inputStream = new FileInputStream(file);
            HWPFDocument doc = new HWPFDocument(inputStream);  
            Range range = doc.getRange();  
            range.replaceText("${recNumber}", "123456"); //这里依次替换就可以了!!
            range.replaceText("${recBank}", "中国银行");
            range.replaceText("${recName}", "张三");
            ServletOutputStream os = response.getOutputStream();
            doc.write(os);
            inputStream.close(); 
            os.flush();
            os.close();  
            response.flushBuffer();
        }

    ========================================================================

    效果:这里写图片描述

    展开全文
  • import org.apache.poi.POIXMLDocument; import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import java.io.FileOutputStream; import java.math.BigIn....
    import org.apache.poi.POIXMLDocument;
    import org.apache.poi.xwpf.usermodel.*;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
    
    import java.io.FileOutputStream;
    import java.math.BigInteger;
    import java.util.*;
    
        public class DOCWriter {
    
            public static void searchAndReplace(String srcPath, String destPath, Map<String, String> map, List<String[]> list) {
                try {
                    XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(srcPath));
                    // 替换段落中的指定文字
                    Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
                    while (itPara.hasNext()) {
                        XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
                        //String s = paragraph.getParagraphText();
                        Set<String> set = map.keySet();
                        Iterator<String> iterator = set.iterator();
                        while (iterator.hasNext()) {
                            String key = iterator.next();
                            List<XWPFRun> run = paragraph.getRuns();
                            for(int i = 0; i < run.size(); i++) {
                                if(run.get(i).getText(run.get(i).getTextPosition()) != null && run.get(i).getText(run.get(i).getTextPosition()).equals(key)) {
                                    /**参数0表示生成的文字是要从哪一个地方开始放置,设置文字从位置0开始
                                     * 就可以把原来的文字全部替换掉了
                                     * */
                                    run.get(i).setText(map.get(key),0);
                                }
                            }
                        }
                    }
    
                    // 获取表格数量
                    List<XWPFTable> tables = document.getTables();
                    for (int i = 0; i < tables.size(); i++) {
                        XWPFTable table = tables.get(i);
                        int rows = table.getNumberOfRows();
                        // 替换表格中的特殊字段
                        for (int k = 0; k < rows; k++) {
                            XWPFTableRow row = table.getRow(k);
                            List<XWPFTableCell> cells = row.getTableCells();
                            for (XWPFTableCell cell : cells) {
                                for (Map.Entry<String, String> e : map.entrySet()) {
                                    if (cell.getText().equals(e.getKey())) {
                                        cell.removeParagraph(0);
                                        cell.setText(e.getValue());
                                    }
                                }
                            }
                        }
                        CTTbl ctTbl = table.getCTTbl();
                        CTTblPr ctTblPr = ctTbl.getTblPr() == null ? ctTbl.addNewTblPr() : ctTbl.getTblPr();
                        CTTblWidth ctTblWidth = ctTblPr.isSetTblW() ? ctTblPr.getTblW() : ctTblPr.addNewTblW();
                        CTJc ctJc = ctTblPr.addNewJc();
                        ctJc.setVal(STJc.Enum.forString("center"));
                        ctTblWidth.setW(new BigInteger("8000"));
                        ctTblWidth.setType(STTblWidth.DXA);
                        // 第三个表格为动态表格
                        if (list != null && list.size() > 0 && i == 2) {
                            for (int m = 0; m < list.size(); m++) {
                                XWPFTableRow tableRow = table.getRow(m);
                                for (int n = 0; n < 6; n++) {
                                    XWPFTableCell cell02 = tableRow.getCell(n);
                                    cell02.setText(list.get(m)[n]);
                                }
                            }
                        }
                    }
                    FileOutputStream outStream = new FileOutputStream(destPath);
                    document.write(outStream);
                    outStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
            }
    
            public static void main(String[] args) {
                Map<String, String> map = new HashMap<>();
                map.put("${no}", "684364643146346434");
                map.put("${loanname}", "ejsdf");
                map.put("${cardName}", "684364643146346434");
                map.put("${bankName}", "湖湘财富");
                String srcPath = "F:\\湖湘财富借款协议(借款人版本)最终版2.0.docx";
                String destPath = "D:\\2.doc";
                List<String[]> list01 = new ArrayList<>();
                list01.add(new String[]{"A","美女好看", "sdfew", "234234", "sdfr4", "123"});
                list01.add(new String[]{"A","美女好看", "sdfew", "234234", "sdfr4", "123"});
                list01.add(new String[]{"A","美女好看", "sdfew", "234234", "sdfr4", "123"});
                list01.add(new String[]{"A","美女好看", "sdfew", "234234", "sdfr4", "123"});
    
                searchAndReplace(srcPath, destPath, map, list01);
            }
    }
    展开全文
  • 需求分析:工作中遇到的一个技术需求,需要用java代码操作Word,查找Word中的mark标记,然后进行替换,简而言之就是“替换word中的指定字符串”; 解决办法:可以用JACOB和POI来实现,下面我用的是POI操作。 用poi...
  • JAVA替换Word模板指定字符,并可插入图片。 之前有写过一篇使用jacob对word插入图片的博客。点击率蛮高8800多次,当然多亏了百度搜索引擎的帮忙???? 但是小编在使用以前写的代码走了一遍流程时,发现代码貌似会报错...
  • package com.xfzx.test.POI.main; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExcept...
  • POI替换docx文件中的文本段的关键字 需求描述 问题点 实现 总结 POI替换docx文件中的文本段的关键字 需求描述 需要在替换文本段中的关键字的同时还是需要保留该关键字的格式 例如: 期望的结果: 问题...
  • package com.xfzx.test.POI.main; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.
  • Java代码poi替换Excel表格内容

    千次阅读 2019-01-17 14:20:28
    所需jar包 xdocreport-2.0.1.jar xmlbeans-5.3.0-rc1.jar xmlgraphics-commons-...poi-3.9-20121203.jar poi-examples-3.9-20121203.jar poi-excelant-3.9-20121203.jar poi-ooxml-3.9-20121203.jar poi-scratchpa...
  • java poi 替换word文本

    千次阅读 2018-01-16 15:58:09
    // 替换段落中的指定文字 Iterator<XWPFParagraph> itPara = document.getParagraphsIterator(); while (itPara.hasNext()) { XWPFParagraph paragraph = (XWPFParagraph) itPara.next(); List<XWPFRun>...
  • * 注意模板需要替换字符串的格式 * 1、要连着打出来,或者在别的地方写好粘过来 * 2、先word转PDF,再将PDF转word * <p> * 替换word模板并生成新的word * * @param srcPath 模板地址 ...
  • java poi替换word内容生成pdf文件

    万次阅读 热门讨论 2019-01-15 14:15:17
    替换word文档内容 package com.docx.test; import org.apache.poi.xwpf.usermodel.*; import org.junit.Test; import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.List; ...
  • java poi 替换word内容

    万次阅读 2018-08-15 15:15:46
    以上数据为替换部分的数据。 以上为模版内容     /**  *   * @param params //需要替换的文字。  * @param wgylist1 //生成表格的list  * @param lzlist1 //生成表格的list  * @param dateStr   ...
  • 最近做了一个在word中替换指定字符串,插入图片,转换成pdf的需求,弄了两天多才搞出来,本以为everything is ok,但是在本地调试什么都是好的。 放到服务器上以后。。。却乱码了。。。乱码了。。。码了。。。了,...
  • 感谢... 感谢http://word.apachepoi.com/post/30 不废话直接上代码 package com.xfzx.test.POI.main; import java.io.FileOutputStream; import java.util.HashMap; import java.uti...
  • 使用poi读取word文档(docx类型),进行数据替换。 另外,为了记录poi设置行间距的api,真是找了好几十分钟才找到啊啊啊啊!!! import org.apache.poi.xwpf.usermodel.*; import org.springframework.util....
  • 使用poi替换word模版

    2017-07-02 00:06:00
    import org.apache.poi.xwpf.usermodel.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.util.Iterator; import java.util.List; import java.util.Map; import java....
  • 二、代码进行替换 import java.io.*; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import com.aimsphm.utils.StringUtils; import org.apache...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,391
精华内容 1,356
关键字:

poi替换字符