新建一个文本文档,用记事本打开,设置编码为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
分享到:
相关推荐
**RTF模板生成Word文档** RTF是一种通用的文本格式,它可以包含丰富的文本样式、图像和表格等元素。使用RTF模板生成Word文档通常涉及到编程或自动化脚本。这一步骤通常用于批量生成具有固定结构和样式的文档,如...
#### 五、Java读取Word模板文件的方法 在Java环境中读取Word模板文件并填充数据,通常需要借助第三方库,例如Apache POI。以下是简化的步骤: 1. **导入Apache POI库**:在项目中添加Apache POI依赖。 2. **读取...
Java生成Word文档是一种常见的需求,特别是在企业级应用中,例如报告生成、数据导出等。在Java中,我们可以使用各种库来实现这个功能,比如Apache POI,它是一个开源项目,提供了API来处理Microsoft Office格式的...
Java 读取 Word 文档是常见的需求,尤其是在自动化处理、数据导出或文档生成的场景中。本示例主要探讨如何使用 Java 处理 RTF(Rich Text Format)文档,而不是直接读取 .doc 或 .docx 文件。这是因为直接读取 Word ...
3. 文件I/O操作:在Java中读取和写入文件,包括RTF模板和生成的.doc文件。 4. 类库的使用:理解和使用rtftemplate-1.0.1-b13.jar库,了解其提供的API和方法。 5. 集成开发:将这些工具和库集成到Java项目中,构建...
1. **读取RTF模板**:通过字节流读取RTF模板文件,将文件内容转换为字符串。在提供的代码段中,`readByteRtf`函数使用`FileInputStream`读取模板文件,并将其内容转化为字符串。 2. **转换字符串**:将需要替换的...
下面是一个简单的示例代码片段,演示了如何使用Apache POI和RTF模板生成Word文档: ```java import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Range; import java.io.*; public ...
### JAVA动态生成Word文档技术及其优缺点 #### Jacob - **优点**:功能强大,能实现复杂文档的生成与编辑。提供了丰富的API来控制Word文档的各个方面,如文本样式、表格、图像等。 - **缺点**:代码量大,设置样式...
这个压缩包的主要目的是教你如何使用模板来导出Word文档,这在处理批量生成报告、自定义格式化文档或者自动化办公任务时非常有用。以下是根据提供的文件名推测出的相关知识点: 1. **Aspose.Words库**: `Aspose....
总的来说,Java读取Word文件的方法取决于具体需求和可用资源。如果对性能和稳定性有较高要求,或者需要处理复杂的格式,可能需要选择更专业的库;而对于简单的文本替换任务,使用RTF格式和基础的IO操作可能是一个...
3. Java2word方案:Java2word是一个在Java程序中调用MS Office Word文档的组件(类库)。该组件提供了一组简单的接口,以便Java程序调用他的服务操作Word文档。 4. iText方案:iText操作Excel还行,对于复杂的大量的...
本项目聚焦于“word模板替换,插入图片”,涉及到的技术包括jacob、rtf模板文件处理、docx4j、itext以及条码生成。下面将详细解释这些知识点。 1. **jacob**: jacob是Java和COM接口的一个桥梁,它允许Java程序...
首先,Free Spire.Doc for Java支持广泛的Word文档格式,包括.doc、.docx、.rtf、.html等,这使得它能够处理各种来源的Word文件。利用此库,开发者可以轻松实现以下功能: 1. **创建和编辑文档**:从头创建新的Word...
1. **处理模板文档**:Aspose.Words支持使用模板文档(.dotx文件)并填充数据,生成新的Word文档。 2. **格式保持**:转换过程中,Aspose.Words会尽可能保留原始文档的样式和布局。 3. **图像和图表处理**:可以读取...
在这款库的帮助下,开发者能够方便地在Java应用程序中创建、读取、编辑和转换Word文档,无需依赖Microsoft Office。 1. **核心功能**: - **创建文档**:使用Free Spire.Doc for Java,你可以从头开始创建新的Word...
总的来说,`aspose-words-15.8.0-jdk16.jar`和`license.xml`文件是开发人员在Java项目中实现高效、灵活的Word文档处理功能的重要工具,尤其在需要将Word文档转换为其他格式(如图片或PDF)时,其功能尤为突出。...