java将文件压缩成zip包返回给浏览器。浏览器下载zip压缩包。

1、生成pdf模板。

public String dealAdamasWithFtl(){
	HttpServletRequest request = ServletActionContext.getRequest();
	//访问路径
	String ctx = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
	Map<String, Object> session = ActionContext.getContext().getSession();
	Configuration config = new Configuration();
	StringBuffer sb = new StringBuffer();
	try {
		config.setDirectoryForTemplateLoading(new File(this.getCoaPath() + "/manager/materialCheckSelect/templates/"));
		config.setDefaultEncoding("UTF-8");
		Map<String,Object> map = new HashMap<String, Object>();
		map.put("ctx",ctx);
		map.put("batchCOA", session.get("batchCOA"));
		ProductReagent pr = (ProductReagent) session.get("productreagent");
		List<GreagentReagents> list = (List<GreagentReagents>) session.get("GreagentReagentsList");
		pr.setProductImage1(DateUtil.getImageUrl(pr.getProductImage1()));
		if(ProductUtil.checkNull(pr.getStructureDescription())){
			pr.setCoaProductImg(DateUtil.getImageUrl(pr.getCoaProductImg()));
		}
		map.put("productreagent", pr);
		map.put("greagentReagentsList", list);
		map.put("materialCheckRecord", session.get("materialCheckRecord"));
		map.put("mcrs", session.get("mcrs"));
		map.put("storage", session.get("storage"));
		
		Template template = config.getTemplate("adamas.ftl");
		template.setEncoding("UTF-8");
		
		StringWriter sw = new StringWriter();
		template.process(map, sw);
		sb = sw.getBuffer();
		sw.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return sb.toString();
}

 2、将pdf模板的String字符写入本地创建的.pdf文件中。

/**
 * 解析上传的Excel文件,并在本地生成pdf文件
 * */
public String doBatchCoaQuery() {

	try {
		InputStream is = new FileInputStream(uploadExc);
		org.apache.poi.ss.usermodel.Workbook wb = WorkbookFactory.create(is);

		//获得该工作区的第一个sheet
		Sheet sheet = wb.getSheetAt(0);
		int totalRows = sheet.getLastRowNum();
		if(totalRows > 5000){//数据不能超过5000条
			return printMsg("上传失败,最多不能超过5000条数据!");
		}
		if(totalRows < 1){//无数据
			return printMsg("无数据,请添加数据后重新上传!");
		}

		String content = "";
		for(int i = 1;i <= totalRows; i++){//检查数据
			Row everyRow = sheet.getRow(i);
			if(everyRow != null){

				content = composeExc07(everyRow,0);
				if(ProductUtil.checkNull(content)){
					return printMsg("第" + new Integer(everyRow.getRowNum()+1) + "行,第" + new Integer(1) + "列商品编号或者原始编号不能为空,请修改数据后重新上传!");
				}
				content = composeExc07(everyRow,1);
				if(ProductUtil.checkNull(content)){
					return printMsg("第" + new Integer(everyRow.getRowNum()+1) + "行,第" + new Integer(1) + "列批号不能为空,请修改数据后重新上传!");
				}

			}
		}

		String pdfStr;
		String result;
		File file;
		String fileAbsolutePath;

		file = new File(path);
		if(!file.exists()){
			file.mkdirs();
		}

		List<String> pathList = new ArrayList<>();
		ITextRenderer renderer = new ITextRenderer();
		ITextFontResolver fontResolver = renderer.getFontResolver();// 解决中文支持问题
		fontResolver.addFont("C:/Windows/fonts/msyh.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
		renderer.getSharedContext().setBaseURL(new File(this.getSavePath()).toURI().toURL().toString()+"/");// 解决图片的相对路径问题
		for(int i = 1; i <= totalRows; i++) {

			Row everyRow = sheet.getRow(i);
			if(everyRow != null){

				productNum = composeExc07(everyRow, 0);
				batchCOA = composeExc07(everyRow, 1);
				result = this.produceCOA1();
				if("ADAMAS".equals(result)){
					pdfStr = this.dealAdamasWithFtl();
					fileAbsolutePath = path + File.separator + "COA(Adamas)" + UUID.randomUUID() + ".pdf";
					file = new File(fileAbsolutePath);
					if(!file.exists()){
						file.createNewFile();
					}
					OutputStream outputStream = new FileOutputStream(fileAbsolutePath);
					renderer.setDocumentFromString(pdfStr);
					renderer.layout();
					renderer.createPDF(outputStream, Boolean.TRUE);
					outputStream.close();
					pathList.add(fileAbsolutePath);
				}else if("non-coa".equals(result)){
					pathList.add(SystemConfig.getInstance().getProperty("NEW_FILE_PATH") + this.nonCoaUrl);
				}

			}
		}

		if(pathList.size() == 0){//没有可以导出的pdf文件
			return printMsg("没有可以导出的pdf文件!");
		}

		session.put("pathList", pathList);

	} catch (Exception e) {
		e.printStackTrace();
	}

	return printMsg("1");

}

3、读取本地文件并生成zip压缩包,获取浏览器response响应流并将zip流反馈给浏览器。

/**
 * 导出(COA)pdf文件压缩包
 * @return
 */
public void exportCoaZip(){
	try {
	    List<String> pathList = (List<String>) session.get("pathList");

		HttpServletResponse response = ServletActionContext.getResponse();
		OutputStream os = response.getOutputStream();
		//指定下载的文件名--设置响应头
		response.setContentType("application/zip; charset=UTF-8");
		response.setDateHeader("Expires", 0);
		response.setHeader("Content-Disposition", "attachment;filename=" +             
        URLEncoder.encode("coa-pdfs", "UTF-8") + ".zip");
		response.setHeader("Pragma", "no-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setCharacterEncoding("UTF-8");

		//多个pdf写入压缩文件
		ZipOutputStream zipOutputStream =new ZipOutputStream(response.getOutputStream());
		ZipEntry entry;
		//ByteOutputStream byteOutputStream;
		InputStream inputStream;
		byte[] bytes = new byte[2048];
		int len;
		File file;
		for (String path : pathList) {

		file = new File(path);

		if(file.exists()){
			entry = new ZipEntry(file.getName());
			zipOutputStream.putNextEntry(entry);

			inputStream = new FileInputStream(path);

			while ((len = inputStream.read(bytes)) > 0) {
				//byteOutputStream.write(bytes, 0, len);
				zipOutputStream.write(bytes, 0, len);
			}

			//byteOutputStream.writeTo(zipOutputStream);
			inputStream.close();
			zipOutputStream.closeEntry();

			if(path.indexOf("Adamas") != -1 || path.indexOf("General") != -1){
				file.delete();
			}
		}

	}

	zipOutputStream.close();

	}catch (Exception e) {
		e.printStackTrace();
	}

}

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java源码100个设计实例, 大量 实例,可以作为你的学习设计参考。 实例如下: Applet钢琴模拟程序java源码 Calendar万年历 copass源代码.rar DataBuffer在Java中使用ADO.NET.rar EJB 模拟银行ATM流程及操作源代码 ejbCreate函数用于初始化一个EJB实例 EJB中JNDI的使用源码例子 EJB的真实世界模型(源代码).rar ftp文件传输 ftp简易服务器.rar HAHA CHAT Java仿QQ聊天程序源代码.rar html 标记大全.rar iCHAT聊天室基于Java.rar IP定位器.rar J2ME优化压缩PNG文件.rar J2ME冒险游戏CASPER源代码.rar J2me月光战机游戏源码.rar J2ME黑白棋游戏手机版 v2.1完整源码.rar JasperReports 报表类库v3.5.rar Java 3DMenu 界面源码.rar Java 3D魔方游戏源码及中文注释.rar Java EJB中有、无状态SessionBean的两个例子 Java Socket 聊天通信演示代码 java Socket通信实现.rar Java Telnet客户端实例源码 Java zip压缩包查看程序源码.rar java 一个消息发布网站.rar Java 数字签名、数字证书生成源码.rar Java 版的酒店系统,貌似完整.rar Java 电梯模拟程序 v2.0.rar Java 组播组中发送和接受数据实例 Java 飞机订票.rar Java 高考信息管理系统 SQL数据库.rar Java (Jsp)制作简单的表单程序.rar Java+ajax写的登录实例.rar JAVA+JSP的聊天室.rar Java+MsSQL超市进销存(毕业设计及答辩资料).rar Java+sqlserver2000做的员工管理系统.rar Java+SQL信用卡管理系统源代码.rar Java+XML写的RSS阅读器.rar Java+XML日程提醒系统.rar Java24点游戏逼真图形版代码.rar JavaScript万年历.rar Java二进制IO类与文件复制操作实例.rar Java压缩包中提取文件.rar Java从网络取得文件.rar Java仓库管理系统,Access数据库.rar Java仿Vista界面风格的登录窗口.rar Java仿千千静听音乐播放器源代码.rar Java企业人事管理系统源码.rar java俄罗斯方块 java凭图游戏 Java利用DES私钥对称加密代码实例 Java加密解密工具集 JCT v1.0源码.rar Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子时钟源代码 Java多用户聊天室程序(毕业设计).rar Java大型CERP进销存系统.rar Java存储与读取对象.rar Java局域网通信——飞鸽传书源代码.rar JAVA帮助视图组件库 Help GUI 1.1源代码.rar JAVA开发的打字软件源程序.rar Java开发的简单WEB服务器源码.rar Java数据压缩与传输实例 Java数组倒置 Java日期选择控件完整源代码.rar Java机车狂飙源代码.rar Java模仿的MSN聊天软件.rar java模拟掷骰子2个 Java毕业论文:搜索引擎系统附源代码.rar JAVA毕业设计_员工管理系统含文档.rar Java毕业设计一款J2me飞行射击游戏.rar java求一个整数的因子 Java波浪文字制作方法及源代码.rar Java火影忍者游戏源代码.rar JAVA版Swing星际争霸游戏源代码.rar Java生成密钥的实例 Java电子相册源码.rar Java目录监视器源程序.zip JAVA短信网关平台(值得一看).rar Java绘制图片火焰效果.rar Java编写的HTML浏览器.rar Java编写的山寨QQ,多人聊天+用户在线.rar Java编写的显示器显示模式检测程序.rar Java编写的网页版魔方游戏.rar java聊天室 Java聊天程序(JBuilder).rar Java聊天程序,括服务端和客户端.rar Java聊天软件Visual Chat v1.91源码.rar Java访问权限控制源代码.rar Java读写文本文件的示例代码 Java赌神游戏网络版源代码.rar Java超市管理,SQL2000+源代码.rar Java超市进销存系统.rar Java软件度量源码.ra
java源码JSP实例源码JAVA开发源码65个合集: Java自定义光标程序源码.rar Jav动画图标源码(显示GIF图像).rar JLoading Java版的Mp3下载工具.rar JSP 动态数据菜单.rar JSP 学生管理系统(全部代码+数据库).rar jsp+servlet+javabean+mysql党员信息管理系统.rar JSP开发的项目跟踪系统.rar JSP树型菜单 DTree.zip jsp生产管理系统.rar jsp高校科研项目管理系统.rar msn聊天程序Java仿真代码.rar Notebook源码,Java记事本.rar P2P--多用户在线聊天室(Java源码).rar P2P源码 Azureus 2.5.0.2(JAVA).rar PDF分割与合并源代码.rar QR解码的Java实现程序.rar Skype 4.0 Java版源码及开发文档.rar SnakeScript Java游戏脚本引擎 v1.1.rar weblogic+j2ee构建音乐网站(原代码+数据库).rar web综合教学管理系统.rar YOYOPlayer 基于Java的网络播放器源代码.rar 一个支持servlet的web服务器.rar 一个较初级的EJB商业应用的例子.rar 一款Java网络格斗游戏源码.rar 业务流程管理(BPM)和工作流系统 Activiti.zip 中国移动业务管理系统源码(SSH框架).rar 书籍管理系统.rar 企业进销存管理系统.rar 传奇私服登录器Java版附源代码.rar 修改表头加密数据库.rar 分离SQL Server数据库.rar 单位固定资产登记管理系统JAVA版.rar 单机版java五子棋V1.1.rar 在Servlet中连接数据库的Java代码.rar 备份数据源.rar 学生成绩系统(图形界面).rar 学生课程管理系统.rar 宾馆管理系统.rar 手机游戏J2ME毕业设计.rar 打地鼠游戏.rar 数据持久层框架 Hibernate.zip 数据结构提取器.rar 文件压缩解压缩包 Commons Compress.rar 日历同步统计 GCALDaemon.zip 物业管理系统毕业设计+源码.rar 用iText类库制作PDF文档.rar 用JAVA做的聊天软件,有安装程序和源代码.rar 用java写的SFTP代码.rar 用Java加密类实现DES、RSA及SHA的加密算法.rar 用jdom解析xml.rar 电子书店管理系统.rar 编译原理--LR(1)分析表构造(JAVA).rar 网上书店.rar 网络电视源代码TV-Browser.rar 网络蚂蚁Java版.rar 网页浏览器.rar 蜀山剑侠传游戏J2ME手机版源代码.rar 超市购物系统.rar 车间管控.rar 轻松商城系统.rar 选修课程管理系统V1.2.3.rar 邮政汇款打印程序.rar 配置ODBC数据源.rar 销售预测系统PDP系统.rar
java源码J实例源码JAVA开发源码55个合集: Java中的Blowfish对称密钥加密算法类和实例.rar Java中的EJB编程实例代码.rar Java中的SSL及HTTPS协议实例源码.rar Java写的ATM机取款模拟程序.zip Java写的一个mp3播放器.rar Java写的图片幻灯片切换特效.rar Java写的天气预报软件.rar Java写的巨型LCD液晶时钟显示屏.rar JAVA图书馆管理系统源码.rar Java图像文件的缩小与放大.rar Java学生信息管理系统源码.rar Java推箱子游戏(50关+音效).rar Java文件切割器源代码.rar Java文件选择器源代码.rar Java文字跑马灯与信息窗口.rar Java游戏中斜视角编辑器及引擎源代码.rar Java游戏使命的召唤源码.rar Java游戏沙丘城堡源代码.rar Java源码的仿QQ聊天程序.rar Java用GZIP压缩解压文件.rar JavaZip压缩多个文件实例源码.rar Java用的在线地图浏览模块.rar Java约瑟夫环演示Applet源码.rar java网络五子棋的源代码.rar JAVA网络抓程序.rar Java转换xml.rar java项目源码在线相册系统.rar 书籍管理系统.rar 企业进销存管理系统.rar 传奇私服登录器Java版附源代码.rar 修改表头加密数据库.rar 分离SQL Server数据库.rar 单位固定资产登记管理系统JAVA版.rar 单机版java五子棋V1.1.rar 学生成绩系统(图形界面).rar 学生课程管理系统.rar 手机游戏J2ME毕业设计.rar 打地鼠游戏.rar 数据持久层框架 Hibernate.zip 数据结构提取器.rar 文件压缩解压缩包 Commons Compress.rar 日历同步统计 GCALDaemon.zip 物业管理系统毕业设计+源码.rar 电子书店管理系统.rar 网上书店.rar 网络电视源代码TV-Browser.rar 网络蚂蚁Java版.rar 网页浏览器.rar 蜀山剑侠传游戏J2ME手机版源代码.rar 超市购物系统.rar 车间管控.rar 轻松商城系统.rar 选修课程管理系统V1.2.3.rar 配置ODBC数据源.rar 销售预测系统PDP系统.rar 阳光酒店管理系统.rar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值