Java读写docx文档(读取内容并替换其中的关键字)
2016-09-01 17:36
639 查看
Java读取.docx(兼容.doc)文档,并替换其中的关键字为需要的内容,而这些关键字是动态配置的,并不固定,你并不知道配置中的关键字有哪些。
思路:
1.找到文档中的关键字:我们将需要替换的关键字放在配置文件中动态的配置然后读取,本例中关键字形式为${关键字},当然,也可以通过正则来找到关键字;
2.遍历配置文档,找到其中的关键字,同时遍历配置文件,如果该关键字在配置文件中存在,那么替换掉这个关键字,否则进行下一次循环。
下面贴我的代码。
需要的jar包:
dom4j-1.6.1.jar
poi-3.8-20120326.jar
poi-examples-3.8-20120326.jar
poi-excelant-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
poi-scratchpad-3.8-20120326.jar
xmlbeans-2.3.0.jar
maven地址:
我上传的这些jar包的地址:http://download.csdn.net/detail/innerpeacescorpio/9619679
源文档内容示例:
代码
替换后的文档
思路:
1.找到文档中的关键字:我们将需要替换的关键字放在配置文件中动态的配置然后读取,本例中关键字形式为${关键字},当然,也可以通过正则来找到关键字;
2.遍历配置文档,找到其中的关键字,同时遍历配置文件,如果该关键字在配置文件中存在,那么替换掉这个关键字,否则进行下一次循环。
下面贴我的代码。
需要的jar包:
dom4j-1.6.1.jar
poi-3.8-20120326.jar
poi-examples-3.8-20120326.jar
poi-excelant-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
poi-scratchpad-3.8-20120326.jar
xmlbeans-2.3.0.jar
maven地址:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> < 4000 span class="hljs-tag"><artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.9</version> </dependency>
我上传的这些jar包的地址:http://download.csdn.net/detail/innerpeacescorpio/9619679
源文档内容示例:
协议书 甲方(受让人):${PARTY_A} 乙方(转让人):________ 丙方(债务人):________ 为妥善解决甲、乙、丙三方的债权债务问题,甲、乙、丙三方在平等自愿、协商一致的基础上,依据合同法等有关法律、法规,就债权转让事宜达成如下协议: 第一、债权转让 1.1、乙方同意按本协议的条款和条件向甲方转让债权,甲方同意按本协议的条款和条件从乙方受让债权。 1.2、经各方同意,本协议项下的债权转让是有偿的,丙方同意在债权转让完成后向甲方偿还债务,该等债务包括本金(人民币${MONEY}元)和利息(利息率${FEE})。
配置文件:
fileSrc=F:\\word.docx fileDest=F:\\new.docx ${PARTY_A}=andy ${MONEY}=100 ${FEE}=1%
代码
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; /** * * @author andy * @date 2016年8月5日 */ public class Test2 { public static void main(String[] args) { Test2 test = new Test2(); Map<String, Object> param = new HashMap<String, Object>(); List<String> keyList = new ArrayList<String>(); List<Object> valueList = new ArrayList<Object>(); // 获取配置文件所有键值对 Properties p = test.readP();// 配置文件读取的参数 Iterator<Object> iterator = p.keySet().iterator(); while (iterator.hasNext()) { keyList.add(iterator.next().toString()); } Iterator<Object> iterator2 = p.keySet().iterator(); while (iterator2.hasNext()) { valueList.add(p.getProperty(iterator2.next().toString())); } for (int i = 0; i < keyList.size(); i++) { System.out.println(keyList.get(i) + ":" + valueList.get(i)); param.put(keyList.get(i), valueList.get(i)); } // 替换文档关键字 WordUtil.generateWord(param, param.get("fileSrc").toString(), param.get("fileDest").toString()); } /** * 读取配置文件 * * @return */ private Properties readP() { InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties"); Properties p = new Properties(); try { p.load(inputStream); } catch (IOException e1) { e1.printStackTrace(); } return p; } }
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.poi.POIXMLDocument; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; /** * * @author andy * @date 2016年8月5日 */ public class WordUtil { public static void generateWord(Map<String, Object> param, String fileSrc, String fileDest) { XWPFDocument doc = null; OPCPackage pack = null; try { pack = POIXMLDocument.openPackage(fileSrc); doc = new XWPFDocument(pack); if (param != null && param.size() > 0) { // 处理段落 List<XWPFParagraph> paragraphList = doc.getParagraphs(); processParagraphs(paragraphList, param, doc); } } catch (Exception e) { e.printStackTrace(); } FileOutputStream fopts = null; try { fopts = new FileOutputStream(fileDest); doc.write(fopts); pack.close(); } catch (IOException e) { e.printStackTrace(); } finally { closeStream(fopts); } } public static void closeStream(FileOutputStream fopts) { try { fopts.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 处理段落,替换关键字 * * @param paragraphList * @throws FileNotFoundException * @throws InvalidFormatException */ public static void processParagraphs(List<XWPFParagraph> paragraphList, Map<String, Object> param, XWPFDocument doc) throws InvalidFormatException, FileNotFoundException { if (paragraphList != null && paragraphList.size() > 0) { // 遍历所有段落 for (XWPFParagraph paragraph : paragraphList) { List<XWPFRun> runs = paragraph.getRuns(); for (XWPFRun run : runs) { String text = run.getText(0); // System.out.println("text==" + text); if (text != null) { boolean isSetText = false; for (Entry<String, Object> entry : param.entrySet()) { String key = entry.getKey(); if (text.indexOf(key) != -1) {// 在配置文件中有这个关键字对应的键 isSetText = true; Object value = entry.getValue(); if (value instanceof String) {// 文本替换 // System.out.println("key==" + key); if (text.contains(key)) { text = text.replace(key, value.toString()); } } } } if (isSetText) { run.setText(text, 0); } } } } } } }
替换后的文档
协议书 甲方(受让人):andy 乙方(转让人):________ 丙方(债务人):________ 为妥善解决甲、乙、丙三方的债权债务问题,甲、乙、丙三方在平等自愿、协商一致的基础上,依据合同法等有关法律、法规,就债权转让事宜达成如下协议: 第一、债权转让 1.1、乙方同意按本协议的条款和条件向甲方转让债权,甲方同意按本协议的条款和条件从乙方受让债权。 1.2、经各方同意,本协议项下的债权转让是有偿的,丙方同意在债权转让完成后向甲方偿还债务,该等债务包括本金(人民币100元)和利息(利息率1%)。
相关文章推荐
- Java读写docx文档(读取内容并替换其中的关键字)
- java poi组件 读取word文档 替换文档 内容 图片
- Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容
- Java用POI读取docx文档
- Python 读取文件替换其中的内容并输出到一个新的文件内
- python python-docx 替换word文档部分内容
- Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容
- Ubuntu下使用python读取doc和docx文档的内容
- java POI word的docx文档中的文字替换,并把docx转成pdf文档
- java读取txt文档 将内容存放到数据库
- 编程读取文档Doc,Docx,Pdf的内容
- C#编程读取文档Doc、Docx及Pdf内容的方法
- java通过url在线预览Word、excel、ppt、pdf、txt文档中的内容【只获得其中的文字】
- Java读写txt文档内容
- 用到poi对word的读写,现在我想从1.doc中读取内容,然后修给其中的内容,再把内容写到2.doc中,要保留内容的样式,比如字体大小,内容排版,表格
- Java 读取rtf模板内容然后替换内容,保存为word
- java 读取本地文本文档的内容
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作
- Java maven 读取doc,docx文档
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作