`
tiwson
  • 浏览: 333515 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

【原创】利用dom4j读取并修改word模板内容,并生成word文档

阅读更多
最近在做一个项目,其中需要把客户的提供的word文档动态提供下载服务,在网上找了N多资料,发现很多对word文档都不是很完美。例如:JACOB和JAVA2WORD,这两个都只能在windows平台上使用,对于跨平台系统来讲,就等于形同虚设;然后还有就是apache组织的poi组件,poi对于excle的操作还是不错的,但对于word的操作还处于开发阶段,很多都是很普通的功能,对于word的操作基本上没有什么用途。无奈之下,查了很多资料,发现可以把word转换成mht格式或者rtf格式或者xml格式的文档,本来一开始是想修改mht,但后来发现效果不是很好,而且格式问题很难控制,rtf也是一样,特别是中文问题。后来实在没有办法,就抱着试下的心理用xml文档,才发现效果也不是很好,比较复杂。但相对于上面的方法来讲已经算最好的了。迫于项目需求,没有办法,目前就只好用此方法了。

此方法用到dom4j来解释xml文件,效果不错,也比较简单。深入的以后再写吧,现在先贴个测试时写的类,希望可以抛砖引玉,代码里有解释,欢迎一起交流。


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


public class UpdateReport {
	
	public static void main(String[] args) {
		UpdateReport up = new UpdateReport();
		//把word文档修改成xml文件,然后再对xml进行操作
		up.UpdateXmlFile("d:\\1.xml", "d:\\2.xml");
	}

	/**
	 * 解释xml文档,并修改其内容
	 * @param filename 模板文件
	 * @param newfilename	输出目标文件
	 * @return
	 */
	public void UpdateXmlFile(String filename,String newfilename){
		//利用dom4j解释xml文件
	       try{
	           SAXReader saxReader = new SAXReader(); 
	           Document document = saxReader.read(new FileInputStream(new File(filename)));
	           
	           //替换内容
	           List list = document.selectNodes("//w:t" ); 
	           Iterator iter = list.iterator();
	           while(iter.hasNext()){
	        	   Element element = (Element)iter.next();
	        	   String str = element.getText();
	        	   //将变量设成你需要更换的内容,这里把变量统一设成$xxx$格式
	        	   if(str != null && "$rid$".equals(str.trim())) {
	        		   System.out.println(element.getText());
	        		   element.setText("LCZC10010");
	        	   }
	           }
	           
	           
	           //把所有的图片内容含有\n字符的去掉,不知道什么原因,
	           //不去掉就显示不出图片来
	           List list1 = document.selectNodes("//w:binData" ); 
	           Iterator iter1 = list1.iterator();
	           while(iter1.hasNext()){
	        	   Element element = (Element)iter1.next();
	        	   String str = element.getText();
	        	   str = str.replaceAll("\n", "");
	        	   element.setText(str);
	           }
	           
	       //利用dom4j输出document到文件上
	           try{
	        	   XMLWriter writer = null;
	               /** 格式化输出 */
	               //OutputFormat format = OutputFormat.createPrettyPrint();
	        	   //OutputFormat format = OutputFormat.createCompactFormat();
	        	   //OutputFormat format = new OutputFormat();
	        	   //格式化各标签之间的间隔符,这里将其设置为空
	        	   OutputFormat format  = new OutputFormat("");
	        	   //格式化换行符,这里将其设成空
	        	   format.setLineSeparator("");
	        	   
	               /** 指定XML编码,一定要设成UTF-8,否则如果有中文,就会导致文件打不开 */
	               format.setEncoding("UTF-8");
	               writer= new XMLWriter(new FileOutputStream(new File(newfilename)),format);
	               writer.write(document);
	               writer.flush();
	               writer.close();      
	           }catch(Exception ex){
	               ex.printStackTrace();
	           }
	           
	           //写出到文件的另一种方式,没有测试
//	           Writer writer = new OutputStreamWriter(new FileOutputStream(newfilename));
//	           document.write(writer);
//	           writer.flush();
//	           writer.close();
	           
	       }catch(Exception ex){
	           ex.printStackTrace();
	       }
	}
	
}
分享到:
评论

相关推荐

    java生成pdf(利用dom4j、freemarker生成固定模板格式的pdf文件)

    本篇文章主要介绍如何利用DOM4J和FreeMarker这两个库来生成固定模板格式的PDF文件。首先,我们需要理解这两种库的基本功能和用途。 DOM4J是一个强大的Java XML API,它提供了一套全面的XML处理功能,包括读写XML...

    java XML解析方式实现自动生成word文档

    在Java编程环境中,生成Word文档是一项常见的任务,尤其在企业级应用中,如报告生成、数据分析等场景。XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来...

    office word文档解析

    本项目专注于“Office Word文档解析”,它提供了对doc和docx两种格式的支持,允许开发者获取文档的段落内容、表格数据以及图片信息。下面将详细介绍这个项目涉及的关键知识点。 1. **Microsoft Word文档格式**: -...

    poi3.9 poi3.10 poi3.15 dom4j综合jar包

    在处理Excel时,DOM4J可能用于构建或解析模板文件,将数据绑定到XML结构,然后利用POI将这些数据转换为Excel格式。此外,DOM4J还可以用于读取Excel文件中的元数据,如工作表信息、样式等。 4. **使用场景**:这些...

    Java通过word编辑为xml和ftl格式的模板创建导出word文档 .zip

    例如,可以使用FileInputStream读取Word模板,然后使用POI库处理内容,最后用FileOutputStream将结果输出为新的Word文档。 6. **数据绑定**: 将XML数据绑定到FTL模板,需要理解FreeMarker的语法,如`<#assign>`...

    Freemarker生成word文档

    - 渲染模板:使用Freemarker API(如`Template`类)加载模板文件,并将数据模型传递给`process()`方法,生成Word文档的HTML或XML内容。 - 转换为Word文档:由于Freemarker直接生成的是HTML或XML,我们还需要将其...

    JAVA生成WORD工具类

    2. **数据绑定**:将业务数据与XML模板中的占位符进行匹配并替换,这可能需要用到如JDOM、DOM4J或XPath等XML处理库。 3. **生成Word文档**:利用Java的API,如Apache POI,将处理后的XML转换为Word文档(.doc或.docx...

    js操作word打印

    可以使用JavaScript读取表单数据,然后创建Word文档模板,填充数据。例如,可以使用`jsdocx`库来创建和填充Word模板: ```javascript var jsdocx = require('jsdocx'); // 获取表单数据 var formData = ...

    Java用freemarker导出word文档

    在这里,它被用来生成Word文档,使得开发者可以通过模板语言来构建和填充Word内容。 1. **Freemarker模板引擎**: Freemarker是Java的一个开源模板引擎,它可以生成任何文本形式的输出,如HTML、XML、Word等。其...

    实现Web项目导出word功能

    在这个实现中,POI库可能会被用来读取和修改Word模板,然后将查询到的数据插入到指定位置。 3. **DOM4J**:DOM4J是一个Java的XML处理库,它可以解析、创建和操作XML文档。在描述中提到的“通过dom4写入功能”,意味...

    swagger文档离线导出,word、pdf、html

    Word 文件可以方便地添加批注、修改和格式调整,确保文档与项目需求保持一致。 2. **PDF**:是一种通用的文档格式,可以在各种设备上查看,保持格式稳定,不依赖特定的应用程序。PDF 文档有助于确保所有用户看到的...

    java操作word可操作书签

    Java 操作 Word 文档,尤其是处理书签,是一种常见的需求,尤其在自动化报告生成或文档模板填充场景中。本文将详细介绍如何使用 Java 实现这一功能,避免依赖第三方库,如 Apache POI、java2word 或 jcob。 首先,...

    docx4j(jar,src,依赖JAR)

    1. **文档生成**:docx4j允许开发者动态生成Word文档,包括文本、段落、表格、图像和图表。这在需要自动生成报告或合同的业务场景中非常有用。 2. **读取与解析**:通过docx4j,可以读取现有的.docx文件,并对其...

    Java实现文档合并,基于模板检验文档标准,对符合标准的文档进行合并操作.zip

    在Java中,我们可以利用如Apache POI这样的库来解析和检查Microsoft Office文档(如Word、Excel)的内容,或者使用JDOM、DOM4J等库来处理XML文档。 对于"文档合并",Java同样提供了多种解决方案。例如,对于Word...

    phpword手册

    这个强大的工具使得开发者可以在服务器端使用PHP脚本生成Word文档,无需依赖任何桌面应用程序。在PHPWord手册中,我们可以找到关于如何使用这个库的详细信息和示例,帮助开发者高效地实现文档操作。 **1. 安装与...

    docx4j-3.3.3.zip

    《docx4j-3.3.3:Java处理Word文档的强大工具》 在Java开发中,处理Microsoft Office格式的文档是一项常见的需求,尤其是docx格式。为了方便开发者,一个名为docx4j的开源库应运而生,它允许程序员以编程方式创建、...

    Linux/win java预览word,并实现打印,各大主流浏览器都支持

    使用freemarker生成Word文档时,其本质是一堆XML数据,可以通过标记替换的方式填充数据。而使用poi库则直接操作Word文档,可以更精确地控制文档格式和样式。 对于poi的操作,文档提供了代码示例,演示了如何通过...

    html word凭据套打

    在某些情况下,开发者可能会使用Word模板来定义复杂的格式和样式,因为Word提供了丰富的排版工具。然后,通过自动化过程,将HTML模板转换为与Word模板类似的格式,保持原有的设计和布局。 实现这一过程的一种方法是...

    html转word.zip

    - 接着,将转换后的XML嵌入到Word模板中,形成完整的Word文档结构。 - 最后,将XML打包成`.docx`文件并提供下载。 4. **注意事项** - CSS样式转换可能不完全:不是所有CSS样式都能完美地映射到Word的样式系统,...

    WORD FOR ASP。NET

    - **读写操作**:读取现有的Word文档并进行修改,或创建新的文档。 - **格式支持**:支持多种文本格式、图像、表格和图表。 - **宏支持**:可以执行Word文档中的宏,实现更复杂的逻辑。 - **安全性**:通过权限...

Global site tag (gtag.js) - Google Analytics