使用已有的word 2007模版导出,常用的方法一般以下几种:
(一)解压word模版后替换变量再压缩为word导出
这是最简单的一种方法,适应性广,代码简单。解压word后,替换变量对应的文件即可,至于怎么替换,方法很多,可以直接替换字符串,也可以解析xml文件替换,替换图片可以直接把/word/media/对应的图片换掉。
放一段简单的使用xpath替换的demo:
public void replaceValueByXPath(String filePath, Map<String, String> paramMap) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder builder = dbf.newDocumentBuilder(); Document doc = builder .parse(new FileInputStream(new File(filePath))); XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); HashMap<String, String> prefMap = new HashMap<String, String>(); prefMap.put("ve","http://schemas.openxmlformats.org/markup-compatibility/2006"); prefMap.put("o", "urn:schemas-microsoft-com:office:office"); prefMap.put("r","http://schemas.openxmlformats.org/officeDocument/2006/relationships"); prefMap.put("m","http://schemas.openxmlformats.org/officeDocument/2006/math"); prefMap.put("v", "urn:schemas-microsoft-com:vml"); prefMap.put("wp","http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"); prefMap.put("w10", "urn:schemas-microsoft-com:office:word"); prefMap.put("w","http://schemas.openxmlformats.org/wordprocessingml/2006/main"); prefMap.put("wne","http://schemas.microsoft.com/office/word/2006/wordml"); SimpleWordNamespaceContext context = new SimpleWordNamespaceContext(prefMap); xpath.setNamespaceContext(context); XPathExpression expr = xpath.compile("//w:t"); NodeList resultNodeList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); for (int i = 0, len = resultNodeList.getLength(); i < len; i++) { Node node = resultNodeList.item(i); String textValue = node.getTextContent(); for (Entry<String, String> entry : paramMap.entrySet()) { textValue = textValue.replaceAll("\\$\\{" + entry.getKey() + "\\}", Matcher.quoteReplacement(entry.getValue())); } node.setTextContent(textValue); } saveDoc2XmlFile(doc, filePath); } public boolean saveDoc2XmlFile(Document document, String filename) { boolean flag = true; try { TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer(); DOMSource source = new DOMSource(); source.setNode(document); StreamResult result = new StreamResult(); FileOutputStream fileOutputStream = new FileOutputStream(filename); result.setOutputStream(fileOutputStream); transformer.transform(source, result); fileOutputStream.close(); } catch (Exception ex) { flag = false; ex.printStackTrace(); } return flag; } class SimpleWordNamespaceContext implements NamespaceContext { private final Map<String, String> PREF_MAP = new HashMap<String, String>(); public SimpleWordNamespaceContext(final Map<String, String> prefMap) { PREF_MAP.putAll(prefMap); } public String getNamespaceURI(String prefix) { return PREF_MAP.get(prefix); } public String getPrefix(String uri) { throw new UnsupportedOperationException(); } public Iterator getPrefixes(String uri) { throw new UnsupportedOperationException(); } }
其他的参考网上的代码,网上使用这种方法的比较多。
(二)使用代码查找所有段落中的文本替换
和第一种思路类似,这种方法也有很多人使用。注意表格中单元格也有段落。代码自己搜。
(三)使用书签定位段落中位置后替换,如下所示:
这种方法网上也有人使用,iteye上有位博友上传了源码,并且实现了在书签位置前/后追加文本(在poi论坛上也有类似的代码),可以搜下。
有其他的方法的可以留言,谢谢。
转载请注明出处,原文链接:http://53873039oycg.iteye.com/blog/2190420.
全文完。
相关推荐
POI 替换word2007文本框的值POI,包含word表中的文本框的值,定义好word模板即可替换word中的值。
使用poi替换word中的图片,无需加书签,doc/docx均可,亲测。
通过POI可实现根据word模板替换文中或者表格的关键字(包括给定表头动态追加表格)。业务需求我是在模板中直接插入图片(例如衬于文字下方),所有代码中没有插入图片代码。
使用poi替换word中的文字和图片实现打印,注意代码中的jar包、图片、word位置
java poi 实现word文本的替换,支持doc和docx格式的文本替换
Apache poi 根据word模板生成word报表 替换 循环列表 图片,代码调试过了,修改相应的图片位置,word模板路径即可运行
java使用poi操作.doc word模板替换,循环插入表格
给出Java-poi导出Word时,所需的Word模板。 注意:1,word模板中的表格单元格只能有唯一的变量。(如需多个变量,可以在word中隐藏表格来实现。) 2,word模板中变量前后不能有空格。
POI解析word2007文本及图片(已测试).doc
一个使用Apache的poi使用word模板循环输出表格行并导出的例子
下载后,运行 可以 Test1中的main方法,注意里面的word模版地址要修改下。 test1.java主要是针对word的书签操作 MSWordTool.java主要是针对word的列表书签的操作,相对来说比较复杂,具体看个人需求。
使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701
java poi XWPFDocument解决替换文字不完整问题 并保存原文档样式
这是一个POI读取word 2003 和 word 2007的例子 是一个Eclipse工程 下载后直接导入工程 运行 src 目录下的 Test java 类即可 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包 也有需要读取的 ...
使用poi将word读取后替换指定内容后再次生成新word,本人经过测试,拿来即用!
poi解析word模板,在需要填写 空白地方建立书签;程序遍历书签,并根据书签名称进行赋值。 <groupId>org.apache.poi <artifactId>poi <version>3.8 <groupId>org.apache.poi <artifactId>poi-ooxml ...
POI报表Word导出
android使用POI操作替换word docx文档,根据 【***】这种标识规则,替换掉docx文档中的内容
非常好的基于word模版,标签,导出word数据的例子
poi操作word的模板,读取数据后,将数据填充到新生成的文件中