根据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);
相关推荐
首先,.dot文件是Microsoft Word的模板文件格式,它包含了预设的页面布局、样式、宏和文本,可以作为创建新文档的基础。当需要生成多个具有相同结构的文档时,使用模板可以大大提高效率。 在C#中,我们可以利用...
当用户需要在不同的计算机上使用Word时,需要将Normal.dot模板文件从一台计算机拷贝到另一台计算机中,以便保持用户的操作习惯。然而,Normal.dot模板文件的位置可能会因操作系统的不同而有所不同。因此,需要使用...
6. **BCGSoft.BCGControlBar.For.Dot.NET.exe**:这是 BCGControlBar for .NET 的可执行安装程序,用户可以通过运行这个文件来安装库及其组件。安装过程中可能会包括设置选项、注册组件等步骤。 总的来说,`.v4.1....
4. 此时,Word 2021将使用Normal.dot模板来创建新的文档。 #### 六、总结 通过理解Normal.dot模板的基本概念及其在Word 2021中的位置与使用方法,可以帮助用户更好地管理和利用这些资源。无论是对于个人还是组织来...
本文将详细解析如何通过C#代码利用Word模板(具体为word.dot)来生成Word文档,并采用书签替换的方式填充文档中的特定字段。 ### 一、原理介绍 #### 1. Word模板(word.dot) Word模板是一种预设格式和样式的文档...
- **不是预装模板**:Normal.dot 不是Word安装过程中预装的模板,而是在用户首次启动Word时自动生成的。 - **用户可自定义**:用户可以根据自己的需求对Normal.dot模板进行定制,例如添加特定的格式化规则、宏命令...
在使用Microsoft Office Word进行文档编辑时,有时会遇到无法保存文件或软件运行异常的问题,这些问题往往与Word的模板文件`Normal.dot`有关。`Normal.dot`是Word默认的正常模板文件,所有的Word文档在创建时都会...
当Word文档在编辑过程中遇到非正常关闭的情况(例如突然断电或系统崩溃),Word会尝试使用最后一次保存的状态恢复文档内容。这种机制能够帮助用户最大限度地减少数据丢失的风险。默认情况下,Word每隔10分钟自动保存...
normal.dot模板是一个Word模板文件,用于存储Word文档的默认设置和样式。它是一个隐藏的文件,位于C:Documents and SettingsAdministratorApplicationDataMicrosoftTemplates文件夹中。 normal.dot模板的作用是提供...
在使用Word时,模板文件Normal.dot扮演着非常重要的角色,它保存着用户的自定义样式、快捷键、宏等信息。当用户需要在另一台计算机上使用Word时,能够快速找到这个模板文件是非常重要的。然而,不同版本的Windows...
在VC++环境中,生成Word文档通常涉及到Microsoft Office的自动化(Automation)技术,这允许开发者通过编程方式控制Word应用程序,创建、编辑和格式化Word文档。本文将深入探讨如何利用VC++自动生成Word文档的代码...
酒数据集wine.dot 算法笔记(8)-决策树算法及Python代码实现中有使用 https://blog.csdn.net/li1873997/article/details/124780441
在java代码中的具体调用方法,结合GraphViz使用
Nachos中文文档教程word.dotNachos中文文档教程word.dotNachos中文文档教程word.dot
然后,创建一个Freemarker配置对象,加载模板文件,设置数据模型,最后使用`Template.process()`方法将数据模型应用到模板上,生成最终的Word文档。 5. **Java代码示例**: - 加载模板:`Template template = ...
Apress.The.Ultimate.VB.Dot.NET.and.ASP.Dot.NET.Code.Book
用Qt操作Word,可以完美的进行一些基本操作