import freemarker.cache.URLTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Locale;
import java.util.Map;
class ExportWord2 {
private static Configuration freemarkerConfig;
static {
freemarkerConfig = new Configuration(Configuration.VERSION\_2\_3_23);
freemarkerConfig.setEncoding(Locale.getDefault(), "UTF-8");
}
static boolean exportWord(final String resourcePath, String templatePath, String fileName, Map data, HttpServletResponse response) throws IOException {
freemarkerConfig.setTemplateLoader(new URLTemplateLoader() {
@Override
protected URL getURL(String s) {
return ExportWord2.class.getResource(resourcePath);
}
});
File file = null;
InputStream fin = null;
ServletOutputStream out = null;
Template temp;
temp = freemarkerConfig.getTemplate(templatePath);
file = createDoc(data,temp);
fin = new FileInputStream(file);
response.setContentType("application/msword");
// 设置浏览器以下载的方式处理该文件名
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
out = response.getOutputStream();
byte\[\] buffer = new byte\[512\]; // 缓冲区
int bytesToRead = -1;
// 通过循环将读入的Word文件的内容输出到浏览器中
while((bytesToRead = fin.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
fin.close();
if(out != null) {
out.close();
}
file.delete(); // 删除临时文件
return true;
}
private static File createDoc(Map data, Template template) {
File f = new File("test.doc");
try {
// 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
template.process(data, w);
w.close();
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
return f;
}
public static boolean creatDoc(Map data, final String resourcePath, String templatePath, String pathName) throws IOException {
freemarkerConfig.setTemplateLoader(new URLTemplateLoader() {
protected URL getURL(String s) {
return ExportWord2.class.getResource(resourcePath);
}
});
Template temp=freemarkerConfig.getTemplate(templatePath);
String doctemp=Thread.currentThread().getContextClassLoader().getResource("/").getPath()+"doctemp/";
File dir=new File(doctemp);
if (!dir.exists()||!dir.isDirectory()){
dir.mkdir();
}
File f = new File(doctemp+pathName+".doc");
try {
Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
temp.process(data, w);
w.close();
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
return true;
}
}
近期热议
推荐标签 标签
-
服务器
124 引用 • 580 回帖
服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
-
游戏
174 引用 • 814 回帖
沉迷游戏伤身,强撸灰飞烟灭。
-
国际化
8 引用 • 26 回帖
i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。
-
星云链
3 引用 • 16 回帖 • 2 关注
星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网
-
新人
51 引用 • 226 回帖
让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
新手上路,请谨慎驾驶! -
SendCloud
2 引用 • 8 回帖 • 458 关注
SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。
-
Lute
25 引用 • 191 回帖 • 22 关注
Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。
-
PHP
175 引用 • 407 回帖 • 497 关注
PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。
-
SOHO
7 引用 • 55 回帖 • 48 关注
为成为自由职业者在家办公而努力吧!
-
倾城之链
23 引用 • 66 回帖 • 126 关注
-
InfluxDB
2 引用 • 59 关注
InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。
- Solo
-
Ubuntu
123 引用 • 168 回帖 • 1 关注
Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。
-
WordPress
58 引用 • 113 回帖 • 274 关注
WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。
-
导航
37 引用 • 168 回帖 • 1 关注
各种网址链接、内容导航。
-
Bootstrap
18 引用 • 33 回帖 • 670 关注
Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。
-
Flutter
39 引用 • 92 回帖 • 9 关注
Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。
-
Wide
30 引用 • 218 回帖 • 615 关注
Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。
欢迎访问我们运维的实例: https://wide.b3log.org
-
阿里巴巴
43 引用 • 221 回帖 • 169 关注
阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。
-
Swagger
26 引用 • 35 回帖 • 2 关注
Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。
-
Git
206 引用 • 358 回帖 • 2 关注
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
-
阿里云
89 引用 • 345 回帖
阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。
-
微服务
96 引用 • 155 回帖
微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。
-
PostgreSQL
22 引用 • 22 回帖 • 1 关注
PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。
-
GitHub
208 引用 • 2031 回帖
GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。
-
jsDelivr
5 引用 • 31 回帖 • 46 关注
jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。
-
Ruby
7 引用 • 31 回帖 • 202 关注
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于