最近在做一个项目,其中需要把客户的提供的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();
}
}
}
分享到:
相关推荐
本篇文章主要介绍如何利用DOM4J和FreeMarker这两个库来生成固定模板格式的PDF文件。首先,我们需要理解这两种库的基本功能和用途。 DOM4J是一个强大的Java XML API,它提供了一套全面的XML处理功能,包括读写XML...
在Java编程环境中,生成Word文档是一项常见的任务,尤其在企业级应用中,如报告生成、数据分析等场景。XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来...
本项目专注于“Office Word文档解析”,它提供了对doc和docx两种格式的支持,允许开发者获取文档的段落内容、表格数据以及图片信息。下面将详细介绍这个项目涉及的关键知识点。 1. **Microsoft Word文档格式**: -...
在处理Excel时,DOM4J可能用于构建或解析模板文件,将数据绑定到XML结构,然后利用POI将这些数据转换为Excel格式。此外,DOM4J还可以用于读取Excel文件中的元数据,如工作表信息、样式等。 4. **使用场景**:这些...
例如,可以使用FileInputStream读取Word模板,然后使用POI库处理内容,最后用FileOutputStream将结果输出为新的Word文档。 6. **数据绑定**: 将XML数据绑定到FTL模板,需要理解FreeMarker的语法,如`<#assign>`...
- 渲染模板:使用Freemarker API(如`Template`类)加载模板文件,并将数据模型传递给`process()`方法,生成Word文档的HTML或XML内容。 - 转换为Word文档:由于Freemarker直接生成的是HTML或XML,我们还需要将其...
2. **数据绑定**:将业务数据与XML模板中的占位符进行匹配并替换,这可能需要用到如JDOM、DOM4J或XPath等XML处理库。 3. **生成Word文档**:利用Java的API,如Apache POI,将处理后的XML转换为Word文档(.doc或.docx...
在这里,它被用来生成Word文档,使得开发者可以通过模板语言来构建和填充Word内容。 1. **Freemarker模板引擎**: Freemarker是Java的一个开源模板引擎,它可以生成任何文本形式的输出,如HTML、XML、Word等。其...
可以使用JavaScript读取表单数据,然后创建Word文档模板,填充数据。例如,可以使用`jsdocx`库来创建和填充Word模板: ```javascript var jsdocx = require('jsdocx'); // 获取表单数据 var formData = ...
在这个实现中,POI库可能会被用来读取和修改Word模板,然后将查询到的数据插入到指定位置。 3. **DOM4J**:DOM4J是一个Java的XML处理库,它可以解析、创建和操作XML文档。在描述中提到的“通过dom4写入功能”,意味...
Word 文件可以方便地添加批注、修改和格式调整,确保文档与项目需求保持一致。 2. **PDF**:是一种通用的文档格式,可以在各种设备上查看,保持格式稳定,不依赖特定的应用程序。PDF 文档有助于确保所有用户看到的...
Java 操作 Word 文档,尤其是处理书签,是一种常见的需求,尤其在自动化报告生成或文档模板填充场景中。本文将详细介绍如何使用 Java 实现这一功能,避免依赖第三方库,如 Apache POI、java2word 或 jcob。 首先,...
1. **文档生成**:docx4j允许开发者动态生成Word文档,包括文本、段落、表格、图像和图表。这在需要自动生成报告或合同的业务场景中非常有用。 2. **读取与解析**:通过docx4j,可以读取现有的.docx文件,并对其...
在Java中,我们可以利用如Apache POI这样的库来解析和检查Microsoft Office文档(如Word、Excel)的内容,或者使用JDOM、DOM4J等库来处理XML文档。 对于"文档合并",Java同样提供了多种解决方案。例如,对于Word...
这个强大的工具使得开发者可以在服务器端使用PHP脚本生成Word文档,无需依赖任何桌面应用程序。在PHPWord手册中,我们可以找到关于如何使用这个库的详细信息和示例,帮助开发者高效地实现文档操作。 **1. 安装与...
《docx4j-3.3.3:Java处理Word文档的强大工具》 在Java开发中,处理Microsoft Office格式的文档是一项常见的需求,尤其是docx格式。为了方便开发者,一个名为docx4j的开源库应运而生,它允许程序员以编程方式创建、...
使用freemarker生成Word文档时,其本质是一堆XML数据,可以通过标记替换的方式填充数据。而使用poi库则直接操作Word文档,可以更精确地控制文档格式和样式。 对于poi的操作,文档提供了代码示例,演示了如何通过...
在某些情况下,开发者可能会使用Word模板来定义复杂的格式和样式,因为Word提供了丰富的排版工具。然后,通过自动化过程,将HTML模板转换为与Word模板类似的格式,保持原有的设计和布局。 实现这一过程的一种方法是...
- 接着,将转换后的XML嵌入到Word模板中,形成完整的Word文档结构。 - 最后,将XML打包成`.docx`文件并提供下载。 4. **注意事项** - CSS样式转换可能不完全:不是所有CSS样式都能完美地映射到Word的样式系统,...
- **读写操作**:读取现有的Word文档并进行修改,或创建新的文档。 - **格式支持**:支持多种文本格式、图像、表格和图表。 - **宏支持**:可以执行Word文档中的宏,实现更复杂的逻辑。 - **安全性**:通过权限...