`
53873039oycg
  • 浏览: 844049 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]poi替换word 2007模版常用方法小结

    博客分类:
  • poi
 
阅读更多

        使用已有的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.

       全文完

      

  • 大小: 41.1 KB
0
0
分享到:
评论

相关推荐

    POI 替换word2007文本框的值

    在本文中,我们将深入探讨如何使用POI库来替换Word2007文档中的文本框值,这对于自动化报告生成、批量文档编辑以及模板驱动的文档创建等场景非常有用。 首先,我们需要了解Word2007文档(.docx)的内部结构。它是...

    使用poi替换word中的图片

    本篇将深入探讨如何使用Apache POI库来替换Word文档中的图片,无论文档是.doc还是.docx格式。 首先,我们需要理解Apache POI的工作原理。POI提供了一个高级API,允许开发者读取、创建和修改Office文档。对于Word...

    POI替换word模板中的关键字

    Apache POI是一个强大的Java库,专门用于处理...以上就是使用Apache POI在Java中替换Word模板关键字和动态追加表格的知识点。通过熟练掌握这些技术,你可以构建出强大的文档自动化处理工具,满足各种业务需求。

    使用poi替换word中的文字和图片实现打印

    本示例将深入探讨如何使用Apache POI库来替换Word文档中的文字和图片,并实现打印功能。 首先,确保在项目中正确导入了Apache POI相关的JAR包。通常,这包括poi-ooxml、poi-ooxml-schemas和commons-lang3等。这些库...

    Apache poi 根据word模板生成word报表 替换 循环列表 图片

    在本项目中,我们将关注如何使用Apache POI来根据预设的Word模板生成包含替换内容、循环列表和图片的动态Word报表。 首先,我们需要理解Apache POI的核心概念。在处理Word文档时,POI提供了HWPF(Horrible Word ...

    java poi 替换word文本

    java poi 实现word文本的替换,支持doc和docx格式的文本替换

    POI解析word2007文本及图片(已测试).doc

    Apache POI 解析 Word 2007 文本及图片 Apache POI (Poor Obfuscation Implementation) 是一个 Java 库,用于读取和写入 Microsoft Office 文件,包括 Word、Excel、PowerPoint 等。 Apache POI 提供了对 Word ...

    POI读取 word 2003 和 word 2007 的例子

    这是一个POI读取word 2003 和 word 2007的例子 是一个Eclipse工程 下载后直接导入工程 运行 src 目录下的 Test java 类即可 这个 rar 包中包含着 POI 读取word 2003 和 word 2007 所需要的 jar 包 也有需要读取的 ...

    word文档模板-使用poi技术替换文档中的变量

    本文将详细介绍如何使用POI技术替换Word模板中的变量,并提供具体的实现方法。 #### 二、准备工作 在开始之前,我们需要准备好以下内容: 1. **Java环境**:确保计算机上已安装JDK并配置好环境变量。 2. **Apache...

    java使用poi操作.doc word模板替换,循环插入表格

    本篇文章将深入探讨如何利用POI库在Word文档中进行模板替换以及循环插入表格的操作。 首先,我们需要理解Apache POI的工作原理。POI提供了HWPFOI(用于处理老版的.doc文件)和XWPF(用于处理新版的.docx文件)两个...

    poi操作word书签,兼容2003和2007

    下载后,运行 可以 Test1中的main方法,注意里面的word模版地址要修改下。 test1.java主要是针对word的书签操作 MSWordTool.java主要是针对word的列表书签的操作,相对来说比较复杂,具体看个人需求。

    [简单]poi读取word 2007简单文本框值

    标题中的“poi读取word 2007简单文本框值”指的是使用Apache POI库来读取Microsoft Word 2007文档中简单文本框内的文本内容。Apache POI是一个流行的开源Java库,用于处理Microsoft Office格式的文件,如Word(.docx...

    利用poi+word模版书签,向word中插入数据

    提供的压缩包文件“poi3.9+XWPF源码,模版,包”应该包含了Apache POI 3.9版本的源码以及相关的Word模板和示例代码。你可以参考这些源码进一步学习和实践如何利用POI和Word模板进行数据插入。 总结起来,利用Apache...

    POI替换文本和图片,解决分割异常替换不完全的问题

    在处理Microsoft Office文档,尤其是Word文档时,Java的Apache POI库是一个常用工具。Apache POI是一个开源项目,它提供了API来读取、写入和修改Microsoft Office格式的文件,如DOCX。在这个场景中,我们关注的是...

    POI使用word模板文件循环输出行并导出word

    在这个例子中,我们将探讨如何使用POI库来处理Word文档,特别是利用模板文件循环输出表格行并导出新的Word文档。这个过程在数据分析、报告生成或自动化文档制作等场景中非常有用。 首先,我们需要理解Word文档的...

    使用java Apache poi 根据word模板生成word报表例子

    使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701

    poi word2010替换文字 图片 表格

    绝对好用的word操作 poi word2010替换文字 图片 表格

    poi-tl引擎实现world模板内容替换(支持docx)

    标题中的“poi-tl引擎实现world模板内容替换(支持docx)”指的是使用poi-tl库来操作Word文档模板,并将其中的占位符替换为实际内容。这在需要根据数据动态生成定制化Word报告时非常有用。例如,你可以创建一个包含...

    poi操作word模板

    在提供的`poidemo`压缩包中,可能包含了示例代码或者一个简单的模板文件,用于演示如何使用Apache POI来填充Word模板。通过查看这个示例,你可以更深入地了解实际的编程实践。 总之,Apache POI使Java开发者能够...

    使用poi将word读取后替换指定内容后再次生成新word

    使用poi将word读取后替换指定内容后再次生成新word,本人经过测试,拿来即用!

Global site tag (gtag.js) - Google Analytics