word域实现动态填充信息附件下载
1、问题描述:在页面上一些下载附件功能,点击触发执行下载操作时候,有些电脑的浏览器可以,有些电脑的浏览器下载不了,电脑打开弹出的下载框下载的不是一个文件,而是一个如jspx后缀名的页面,jspx后缀是访问的xhtml页面,显示的是一个代码返回的下载页面名称:
下图是返回的doc格式的,可以正常下载,下面是返回代码返回的下载页面名称:
jspx后缀是访问的xhtml页面,这种是不能正常下载的。
2、问题排查解决:大部分的电脑大部分的浏览器是可以正常下载的,可能涉及到到浏览器版本和其兼容性的问题,不同的内核或者不同的版本所支持的接口或者方法有所不同,内核及版本太多不去一一深究,排查优化代码,原来是在页面的js脚本对应方法中跳转到下载附件的这个页面地址,然后再调用后台实现的:
有时下载会是一个如jspx后缀名的页面,想着不通过这个中间页面直接实现下载,方法是页面js脚本方法中直接访问restful接口形式实现,如下:
这边的地址为一个后台的类注解加上方法注解的方式访问的一个restful接口:
这个接口返回的是二进制字节流文件,用OutputStream对象输出,附上下载附件的后台方法:
@Path("/downloadDlwjBpb")
@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public StreamingOutput downloadDlwjBpb(@Context HttpServletResponse response, @Context HttpServletRequest request) {
String projectguid = request.getParameter("projectguid");
String licenseName = JsfHelper.getDeployWarPath() + "WEB-INF/classes/license.xml";
License license = new License();
try {
license.setLicense(licenseName);
BaseService service = new BaseService();
// 取数据的语句
String sql = "select * from audit_project where rowguid = '" + projectguid + "'";
String sql2 = "select * from audit_dlwj where projectguid='" + projectguid + "'";
//String sql3 = "select * from audit_dyfy_project_yyss where projectguid='" + projectguid + "'";
// 执行封装查询方法,返回实体类
AuditProject AuditProject = service.getSingleResultNative(sql, AuditProject.class);
AuditDlwj dlwj = service.getSingleResultNative(sql2, AuditDlwj.class);
if (dlwj == null) {
dlwj = new AuditDlwj();
}
// document对象结合word邮件合并域,代码给word域赋值
Document doc = new Document();
String filepathname = JsfHelper.getDeployWarPath() + "wsbsdt/PrintDocFlolder/dlwjsqb.doc";
doc = new Document(filepathname);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Map<Object, Object> map = new HashMap<Object, Object>();
// 取值赋值给word域
map.put("applyername", AuditProject.getApplyername());
map.put("contactperson", AuditProject.getContactperson());
map.put("contactphone", AuditProject.getContactphone());
map.put("address", AuditProject.getAddress());
map.put("kwdate", "开始时间:"+EpointDateUtil.convertDate2String(dlwj.getKwdateks(), EpointDateUtil.DATE_FORMAT)+"至结束时间:"+EpointDateUtil.convertDate2String(dlwj.getKwdatejs(), EpointDateUtil.DATE_FORMAT));
map.put("kwaddress", dlwj.getKwaddress());
map.put("applyreason", dlwj.getApplyreason());
if("1".equals(dlwj.getIsbystreetcar())){
map.put("isbystreetcar1", "");
map.put("isbystreetcar0", "□");
}else{
map.put("isbystreetcar1", "□");
map.put("isbystreetcar0", "");
}
if("1".equals(dlwj.getIsaboutgreen())){
map.put("isaboutgreen1", "");
map.put("isaboutgreen0", "□");
}else{
map.put("isaboutgreen1", "□");
map.put("isaboutgreen0", "");
} String tableid = String.valueOf("");
// 在通过mis平台处理通用的字段值
List<Object[]> objlist = getWordFieldAndValue(tableid, "", map);
String[] fieldNames = (String[]) objlist.get(0);// word域
Object[] values = objlist.get(1);// 域对应的值
// 2 替换域和表格并且生成word入库
doc.getMailMerge().execute(fieldNames, values);// 替换基本信息表word中的域
doc.getFirstSection().getPageSetup().setSectionStart(SectionStart.NEW_PAGE);
doc.save(outputStream, SaveFormat.DOC);
// 定义二进制流对象,用来接收数据返回outputstream对象
final byte[] in2b = outputStream.toByteArray();
//JsfHelper.sendRespose(in2b, URLEncoder.encode("道路挖掘申请表.doc"), ".doc");
String fileName = URLEncoder.encode("道路挖掘申请表.doc", "utf-8");
response.setContentLength(in2b.length);
//Content-Disposition不是标准版的http响应头,它是扩展header
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + "");
return new StreamingOutput() { public void write(OutputStream output) throws IOException, WebApplicationException {
output.write(in2b);
output.flush();
}
};
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} return null;
}
word域实现动态填充信息附件下载的更多相关文章
- word域3
WORD是文字处理软件,我们在日常处理一些文字时经常遇到一些问题,如:各种公式的录入,尽管Word都提供了"公式编辑器",但其插入的却是"对象",有时排版会感觉 ...
- 生成word附件和word域动态赋值
生成word文档和word域动态赋值,很多时候需要生成这样的word文档供下载和打印,先制作一个包含了域的 word的模板附件,放在服务器端或者字节流存入数据库,以供需要的时候代码可以获取到,如: 其 ...
- [转载]Java动态填充word文档并上传到服务器
一. 需求背景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是 ...
- [原创]Java动态填充word文档并上传到服务器
一. 需求背景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是 ...
- C#动态生成Word文档并填充数据
C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn ...
- javaweb-JSP action中附件下载的写法
附件下载(包括图片,exl,word)在前台必须给出一个iframe 或者类似于window的窗口,另外,Java文件下载不能通过ajax进行请求,必须添加src属性首选,前台的链接拼接html如下 ...
- word域1
Description: 域是WORD中的一种特殊命令,它由花括号.域名(域代码)及选项开关构成.域代码类似于公式,域选项并关是特殊指令,在域中可触发特定的操作.在用WORD处理文档时若能巧妙应用域, ...
- 解析:使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
之前开发时遇到的一个问题,使用easyui的form提交表单,在Chrome下时没问题的,但是在IE下出现类似附件下载时提示是否保存的现象. 这里记录一下如何解决的.其实这个现象不光是easyui的f ...
- phonegap 附件下载及打开附件
出处:http://my.oschina.net/u/1011854/blog/169434 再次 谢谢作者! 在开发web app并且使用phonegap的情况下,附件下载着实是一件令人头疼的事,什 ...
随机推荐
- Vue 动态绑定CSS样式
今天在做项目上遇见了一个需求,通过不能的进度类型展示不同的进度形态,进度形态通过背景色和背景色上的文字显示. 效果图: 由于Element UI版本我用的是2.5.4 使用进度条的话 就没有2.9. ...
- 【进阶之路】Java的类型擦除式泛型
Java选择的泛型类型叫做类型擦除式泛型.什么是类型擦除式泛型呢?就是Java语言中的泛型只存在于程序源码之中,在编译后的字节码文件里,则全部泛型都会被替换为原来的原始类型(Raw Type),并且会 ...
- http request 请求拦截器,有token值则配置上token值
// http request 请求拦截器,有token值则配置上token值 axios.interceptors.request.use( config => { if (token) { ...
- Flutter学习(8)——CheckBox多选框使用及动态更改多选框数据
原文地址:Flutter学习(8)--CheckBox多选框使用及动态更改多选框数据 | Stars-One的杂货小窝 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同 ...
- 面试常见SQL中where和having的区别你确定你知道吗!
"Where" 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. "Having" 是 ...
- 【死磕 Java 基础】 — 谈谈那个写时拷贝技术(copy-on-write)
copy-on-write,即写时复制技术,这是小编在学习 Redis 持久化时看到的一个概念,当然在这个概念很早就碰到过(Java 容器并发有这个概念),但是一直都没有深入研究过,所以趁着这次机会对 ...
- Java的几种创建实例方法的性能对比(二)
上一篇里对几种书写方式进行了简单的测试,得出了一些初步的结论.这次简单了解Lambda原理后,对测试做了一些调整,发现得到不一样的结果,而这个调整,明显更契合实际开发的场景. 暂时还没有亲自去验证,主 ...
- Redis-缓存穿透/击穿/雪崩
1. 简介 如图所示,一个正常的请求 客户端请求张铁牛的博客. 服务首先会请求redis,查看请求的内容是否存在. redis将请求结果返回给服务,如果返回的结果有数据则执行7:如果没有数据则会继续往 ...
- 11-SpringCloud Hystrix
Hystrix简介 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败. 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务 ...
- Blazor+Dapr+K8s微服务之状态管理
1 状态管理服务器端接口 1.1 添加Dapr.AspNetCore包 在DaprTest1.Server项目中添加Dapr.AspNetCore包,该包实现了ASP. ...