`
刘朝建
  • 浏览: 5684 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Java使用RTFTemplate.dot生成word文件

阅读更多

根据http://zhaozhi3758.iteye.com/blog/1164375文章,稍微补充了一下

一、模板的制作
1.下载RTFTemplate.zip文件,解压到要制作模板的文件夹下(和模板的路径一致),解压后的文件名“RTFTemplate.dot”。

2.新建“名称.fields.xml”文件,代码如下

<?xml version="1.0" encoding="ISO-8859-1"?>
<fields>
	<description><![CDATA[]]></description>
	<bookmark>
		<type>START_LOOP</type>
		<name>START_LOOP_{i}</name>
		<description><![CDATA[]]></description>
	</bookmark>
	<bookmark>
		<type>END_LOOP</type>
		<name>END_LOOP_{i}</name>
		<description><![CDATA[]]></description>
	</bookmark>
	<mergefield>
		<list>false</list><!--false代表本次输出是单个值-->
		<listInfo>$shorts</listInfo><!--去除$符号,shorts要和后台javabean里面的名称一致-->
		<name>$shorts</name><!--方便查看,name和listInfo保持一致-->
		<description><![CDATA[]]></description>
	</mergefield>
	<mergefield>
		<list>true</list><!--true代表本次输出是个集合-->
		<listInfo>$[lines].Content</listInfo>
		<name>$lines.Content</name>
		<description><![CDATA[]]></description>
	</mergefield>
</fields>

 
3.打开RTFTemplate.dot,具体操作如附件“操作步骤”

4.后台代码

struts配置

<global-results>	
	<result type="stream" name="download">
		<param name="contentType">application/octet-stream;charset=utf-8</param>
		<param name="inputName">inputStream</param>
		<!--fileName下载后的文件名称-->
		<param name="contentDisposition">attachment;filename="${fileName}"</param>
		<param name="bufferSize">4096</param>
	</result>		    
</global-results>

 

spring配置

<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	     <property name="freemarkerSettings">
	         <props>
	             <prop key="template_update_delay">0</prop>
	             <prop key="default_encoding">utf-8</prop>
	             <prop key="locale">no_NO</prop>
	             <prop key="template_update_delay">5</prop>
	             <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
	             <prop key="date_format">yyyy-MM-dd</prop>
	             <prop key="number_format">#</prop>
	         </props>
	     </property>
	</bean>

 javabean中初始map

public Map<String, Object> buildWordMap() {
		Map<String, Object> map = super.buildWordMap();
		map.put("shorts", this.shorts);
		map.put("years", this.years);
		return map;
	}

 自己写的一个帮助类

package com.safetys.nbxzzf.util;

import java.util.Map;
import java.util.UUID;

import org.apache.struts2.ServletActionContext;

public class RTFUtil {
	static String REALPATH = "/template/book_rtf/";
	static String OUT_REALPATH = "template/book_word";
	/**
	 * 获取文书RTF格式模板
	 * @param RTFName 模板名称
	 * @return
	 */
	public static String getBookRTFPath(String RTFName){
		return ServletActionContext.getServletContext().getRealPath(REALPATH + RTFName);
	}
	/**
	 * 获取文书模板生成路径
	 * @param name 文件名
	 * @return
	 */
	public static String getBookRTFOutPath(String name){
		String path = ServletActionContext.getServletContext().getRealPath(OUT_REALPATH);
		String filePath = path + "\\" + name;
		return filePath;
	}
	/**
	 * 新建文书word
	 * @param map 数据容器
	 * @param RTFName 模板完整名称
	 * @return word路径
	 * @throws Exception
	 */
	public static String newBookWord(Map<String, Object> map, String RTFName) throws Exception{
		String RTFPath = getBookRTFPath(RTFName);
		//文件重命名
		RTFName = UUID.randomUUID().toString() + ".doc";
		String filePath = getBookRTFOutPath(RTFName);
		// 生成RTF
		RTFGenerator generator = new RTFGenerator();
		
		generator.setContextMap(map);
		generator.run(RTFPath, filePath);
		//文件相对路径
		String path = OUT_REALPATH  + "/" + RTFName;
		return path;
	}
}

设置InputStream的get方法

public InputStream getInputStream() {
		InputStream is = null;
		try {
			is = new FileInputStream(filestr);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return is;
	}

  

注意事项:如果生成的文件有乱码,用记事本打开模板,查找到如下代码
\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;
替换成
\f0\dbch\charset0\fprq2 宋体;

如果模板中使用了lines(集合的话),数据为空时,生成word报错,必须创建一个空对象给他

如:

BookWordLine line = new BookWordLine();
 lines.add(line);

 

 

分享到:
评论

相关推荐

    c#创建基于.dot模板的Word文档.zip

    首先,.dot文件是Microsoft Word的模板文件格式,它包含了预设的页面布局、样式、宏和文本,可以作为创建新文档的基础。当需要生成多个具有相同结构的文档时,使用模板可以大大提高效率。 在C#中,我们可以利用...

    快速找Word模板文件Normal.dot的方法.docx

    当用户需要在不同的计算机上使用Word时,需要将Normal.dot模板文件从一台计算机拷贝到另一台计算机中,以便保持用户的操作习惯。然而,Normal.dot模板文件的位置可能会因操作系统的不同而有所不同。因此,需要使用...

    .v4.1.BCGSoft.BCGControlBar.For.Dot.NET

    6. **BCGSoft.BCGControlBar.For.Dot.NET.exe**:这是 BCGControlBar for .NET 的可执行安装程序,用户可以通过运行这个文件来安装库及其组件。安装过程中可能会包括设置选项、注册组件等步骤。 总的来说,`.v4.1....

    如何通过Word 2021找到Normal.dot共用模板.docx

    4. 此时,Word 2021将使用Normal.dot模板来创建新的文档。 #### 六、总结 通过理解Normal.dot模板的基本概念及其在Word 2021中的位置与使用方法,可以帮助用户更好地管理和利用这些资源。无论是对于个人还是组织来...

    asp 利用word模板生成word

    本文将详细解析如何通过C#代码利用Word模板(具体为word.dot)来生成Word文档,并采用书签替换的方式填充文档中的特定字段。 ### 一、原理介绍 #### 1. Word模板(word.dot) Word模板是一种预设格式和样式的文档...

    如何通过Word 2021 找到 Normal.dot 共用模板.docx

    - **不是预装模板**:Normal.dot 不是Word安装过程中预装的模板,而是在用户首次启动Word时自动生成的。 - **用户可自定义**:用户可以根据自己的需求对Normal.dot模板进行定制,例如添加特定的格式化规则、宏命令...

    word不能保存和normal.dot遇到問題需要關閉的解決辦法

    在使用Microsoft Office Word进行文档编辑时,有时会遇到无法保存文件或软件运行异常的问题,这些问题往往与Word的模板文件`Normal.dot`有关。`Normal.dot`是Word默认的正常模板文件,所有的Word文档在创建时都会...

    word无法打开现有内容(normal.dot)怎么办.docx

    当Word文档在编辑过程中遇到非正常关闭的情况(例如突然断电或系统崩溃),Word会尝试使用最后一次保存的状态恢复文档内容。这种机制能够帮助用户最大限度地减少数据丢失的风险。默认情况下,Word每隔10分钟自动保存...

    删除normal.dot模版 可快速解决Word打不开问题.docx

    normal.dot模板是一个Word模板文件,用于存储Word文档的默认设置和样式。它是一个隐藏的文件,位于C:Documents and SettingsAdministratorApplicationDataMicrosoftTemplates文件夹中。 normal.dot模板的作用是提供...

    怎么快速找到Word模板文件Normal.dot.docx

    在使用Word时,模板文件Normal.dot扮演着非常重要的角色,它保存着用户的自定义样式、快捷键、宏等信息。当用户需要在另一台计算机上使用Word时,能够快速找到这个模板文件是非常重要的。然而,不同版本的Windows...

    利用VC自动生成WORD文档的代码

    在VC++环境中,生成Word文档通常涉及到Microsoft Office的自动化(Automation)技术,这允许开发者通过编程方式控制Word应用程序,创建、编辑和格式化Word文档。本文将深入探讨如何利用VC++自动生成Word文档的代码...

    酒数据集wine.dot

    酒数据集wine.dot 算法笔记(8)-决策树算法及Python代码实现中有使用 https://blog.csdn.net/li1873997/article/details/124780441

    java调用dot文件的实现方式

    在java代码中的具体调用方法,结合GraphViz使用

    Nachos中文文档教程word.dot

    Nachos中文文档教程word.dotNachos中文文档教程word.dotNachos中文文档教程word.dot

    java使用word模板导出个人简历

    然后,创建一个Freemarker配置对象,加载模板文件,设置数据模型,最后使用`Template.process()`方法将数据模型应用到模板上,生成最终的Word文档。 5. **Java代码示例**: - 加载模板:`Template template = ...

    Apress.The.Ultimate.VB.Dot.NET.and.ASP.Dot.NET.Code.Book

    Apress.The.Ultimate.VB.Dot.NET.and.ASP.Dot.NET.Code.Book

    qtdoc.zip_QT word_demo.dot qt word_qt Word开发_qt 操作word_qt 能做Wor

    用Qt操作Word,可以完美的进行一些基本操作

Global site tag (gtag.js) - Google Analytics