`
cometoeye
  • 浏览: 27205 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java读取RTF模板文件生成Word文档

    博客分类:
  • Java
阅读更多
新建一个文本文档,用记事本打开,设置编码为CHINESE_GB2312,另存为后缀为test.rtf文件,存在D盘,然后就可以用Word进行模板的编辑了,其中带有$$标识的字符串必须设置为“宋体”。

import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

public class RTFToWordUtil {

	private static Logger logger = Logger.getLogger(RTFToWordUtil.class);
	
	/**
	 * 字符串转换为rtf编码
	 * 
	 * @param content
	 * @return
	 */
	public String strToRtf(String content) {

		StringBuffer sb = new StringBuffer("");
		try {
			char[] digital = "0123456789ABCDEF".toCharArray();
			byte[] bs = null;
			bs = content.getBytes("GB2312");
			int bit;
			for (int i = 0; i < bs.length; i++) {
				bit = (bs[i] & 0x0f0) >> 4;
				sb.append("\\'");
				sb.append(digital[bit]);
				bit = bs[i] & 0x0f;
				sb.append(digital[bit]);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}

	/**
	 * 替换文档的可变部分
	 * 
	 * @param content 文档内容
	 * @param key 标识
	 * @param replacecontent 替换内容
	 * @return
	 */
	public String replaceRTF(String content, String key, String replacecontent) {
		String rc = strToRtf(replacecontent);
		
		String target = content.replace(key, rc);
		
		return target;
	}

	/**
	 * 半角转为全角
	 */
	public String ToSBC(String input) {
		char[] c = input.toCharArray();
		for (int i = 0; i < c.length; i++) {
			if (c[i] == 32) {
				c[i] = (char) 12288;
				continue;
			}
			if (c[i] < 127) {
				c[i] = (char) (c[i] + 65248);
			}
		}
		return new String(c);
	}

	/**
	 * 替换模板
	 * @param map 标识与替换内容
	 * @param sourceFilePath 模板路径
	 * @param targetFilePath 生成Word文档路径
	 */
	public void rgModel(Map<String, String> map, String sourceFilePath, String targetFilePath) {
		
		/* 字节形式读取模板文件内容,将结果转为字符串 */
		String sourcecontent = "";
		InputStream ins = null;
		try {
			ins = new FileInputStream(sourceFilePath);
			byte[] b = new byte[1024];
			if (ins == null) {
				logger.info(RTFToWordUtil.class.getName()+":源模板文件不存在");
			}
			int bytesRead = 0;
			while (true) {
				bytesRead = ins.read(b, 0, 1024); // return final read bytes
				// counts
				if (bytesRead == -1) {// end of InputStream
					logger.info(RTFToWordUtil.class.getName()+":读取模板文件结束");
					break;
				}
				// convert to string using bytes
				sourcecontent += new String(b, 0, bytesRead);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		/* 修改变化部分 */
		String targetcontent = "";
		int i = 0;
		for (String key : map.keySet()) {
			String value = map.get(key);
			if (i == 0) {
				targetcontent = replaceRTF(sourcecontent, key, value);
			} else {
				targetcontent = replaceRTF(targetcontent, key, value);
			}
			i++;
		}
		/* 结果输出保存到文件 */
		try {
			FileWriter fw = new FileWriter(targetFilePath,
					true);
			PrintWriter out = new PrintWriter(fw);
			
			if (targetcontent.equals("") || targetcontent == "") {
				out.println(sourcecontent);
			} else {
				out.println(targetcontent);
			}
			out.close();
			fw.close();
			logger.info(RTFToWordUtil.class.getName()+":生成文件 " + targetFilePath + " 成功");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {

		RTFToWordUtil oRTF = new RTFToWordUtil();

		Map<String, String> map = new HashMap<String, String>();
		map.put("$timetop$", "2008Y10M12D9H-2008Y10M12D6H");
		map.put("$info$", "idea");
		map.put("$idea$", "look");
		map.put("$advice$", "我们参照检\n验药品的方法");
		map.put("$infosend$", "we");
		
		oRTF.rgModel(map, "d:\\test.rtf", "d:\\test.doc");
	}

}


参考文档:
http://www.iteye.com/problems/14849
http://superzhaoxi.iteye.com/blog/621977
分享到:
评论
4 楼 tianyifeng1989 2012-09-04  
怎么我的总是出现io错误的
3 楼 lyq1130 2012-06-27  
非常感谢,正需要这个 呵呵
2 楼 cometoeye 2011-12-06  
确实不怎么好用
1 楼 zhaobin87 2011-11-29  
貌似不好用吧,中文解决不了。

相关推荐

    根据RTF模板生成WORD,WORD转PDF

    **RTF模板生成Word文档** RTF是一种通用的文本格式,它可以包含丰富的文本样式、图像和表格等元素。使用RTF模板生成Word文档通常涉及到编程或自动化脚本。这一步骤通常用于批量生成具有固定结构和样式的文档,如...

    Java操作Word模板实现动态数据输出

    #### 五、Java读取Word模板文件的方法 在Java环境中读取Word模板文件并填充数据,通常需要借助第三方库,例如Apache POI。以下是简化的步骤: 1. **导入Apache POI库**:在项目中添加Apache POI依赖。 2. **读取...

    java生成word,包括word表格,表格插入图片,jar包都在了

    Java生成Word文档是一种常见的需求,特别是在企业级应用中,例如报告生成、数据导出等。在Java中,我们可以使用各种库来实现这个功能,比如Apache POI,它是一个开源项目,提供了API来处理Microsoft Office格式的...

    java读取word文档.doc

    Java 读取 Word 文档是常见的需求,尤其是在自动化处理、数据导出或文档生成的场景中。本示例主要探讨如何使用 Java 处理 RTF(Rich Text Format)文档,而不是直接读取 .doc 或 .docx 文件。这是因为直接读取 Word ...

    根据RTF模版输出doc文件(草稿)

    3. 文件I/O操作:在Java中读取和写入文件,包括RTF模板和生成的.doc文件。 4. 类库的使用:理解和使用rtftemplate-1.0.1-b13.jar库,了解其提供的API和方法。 5. 集成开发:将这些工具和库集成到Java项目中,构建...

    java读取word文档.pdf

    1. **读取RTF模板**:通过字节流读取RTF模板文件,将文件内容转换为字符串。在提供的代码段中,`readByteRtf`函数使用`FileInputStream`读取模板文件,并将其内容转化为字符串。 2. **转换字符串**:将需要替换的...

    Java使用RTFTemplate.dot生成word文件

    下面是一个简单的示例代码片段,演示了如何使用Apache POI和RTF模板生成Word文档: ```java import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Range; import java.io.*; public ...

    JAVA动态生成word和pdf

    ### JAVA动态生成Word文档技术及其优缺点 #### Jacob - **优点**:功能强大,能实现复杂文档的生成与编辑。提供了丰富的API来控制Word文档的各个方面,如文本样式、表格、图像等。 - **缺点**:代码量大,设置样式...

    导出word.zip

    这个压缩包的主要目的是教你如何使用模板来导出Word文档,这在处理批量生成报告、自定义格式化文档或者自动化办公任务时非常有用。以下是根据提供的文件名推测出的相关知识点: 1. **Aspose.Words库**: `Aspose....

    使用Java读取Word文件的简单例子分享

    总的来说,Java读取Word文件的方法取决于具体需求和可用资源。如果对性能和稳定性有较高要求,或者需要处理复杂的格式,可能需要选择更专业的库;而对于简单的文本替换任务,使用RTF格式和基础的IO操作可能是一个...

    JAVA动态生成word和pdf.doc

    3. Java2word方案:Java2word是一个在Java程序中调用MS Office Word文档的组件(类库)。该组件提供了一组简单的接口,以便Java程序调用他的服务操作Word文档。 4. iText方案:iText操作Excel还行,对于复杂的大量的...

    word模板替换,插入图片

    本项目聚焦于“word模板替换,插入图片”,涉及到的技术包括jacob、rtf模板文件处理、docx4j、itext以及条码生成。下面将详细解释这些知识点。 1. **jacob**: jacob是Java和COM接口的一个桥梁,它允许Java程序...

    Java Word控件-Free Spire.Doc for Java_2.0.0

    首先,Free Spire.Doc for Java支持广泛的Word文档格式,包括.doc、.docx、.rtf、.html等,这使得它能够处理各种来源的Word文件。利用此库,开发者可以轻松实现以下功能: 1. **创建和编辑文档**:从头创建新的Word...

    基于aspose.word的Java文档转换项目,不需要依赖私服Jar包.zip

    1. **处理模板文档**:Aspose.Words支持使用模板文档(.dotx文件)并填充数据,生成新的Word文档。 2. **格式保持**:转换过程中,Aspose.Words会尽可能保留原始文档的样式和布局。 3. **图像和图表处理**:可以读取...

    Free Spire.Doc for Java版本: 3.9.0

    在这款库的帮助下,开发者能够方便地在Java应用程序中创建、读取、编辑和转换Word文档,无需依赖Microsoft Office。 1. **核心功能**: - **创建文档**:使用Free Spire.Doc for Java,你可以从头开始创建新的Word...

    aspose-words-15.8.0-jdk16.jar以及license.xml文件

    总的来说,`aspose-words-15.8.0-jdk16.jar`和`license.xml`文件是开发人员在Java项目中实现高效、灵活的Word文档处理功能的重要工具,尤其在需要将Word文档转换为其他格式(如图片或PDF)时,其功能尤为突出。...

Global site tag (gtag.js) - Google Analytics