`

项目快结束了,总结一下项目中用到的一些技术(二)

阅读更多
由于需求是要求发送附件到邮箱,可以grails插件对附件的支持不是很好,最终决定用birt api将报表导出到一个目录,然后发送附件是通过java mail发送!
导出碰到的问题:
1.导出报表只能到处一张,后面的初始化环境报错(猜测是birt环境初始化太频繁了),解决方法:将所有的报表导出后,在关闭birt平台;
部分方法:
public class ExportReport {
	/**
	 * 初始化
	 * 
	 * @return
	 */
	public IReportEngine configReport() {
		IReportEngine engine = null;
		EngineConfig config = null;
		try {
			config = new EngineConfig();
			// config.setBIRTHome("E:\\birt-2.5.0\\ReportEngine");
			// config.setBIRTHome("E:\\birt-runtime-2_3_1\\ReportEngine");
			config.setBIRTHome("D:\\birtReportWork\\birt-runtime-2_3_1\\ReportEngine");
			// // 这是CS程序,直接设置birthome
			Platform.startup(config);
			IReportEngineFactory factory = (IReportEngineFactory) Platform
					.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
			engine = factory.createReportEngine(config);
			return engine;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * close
	 * 
	 * @param task
	 * @param engine
	 */
	public void closeReport(IRunAndRenderTask task, IReportEngine engine) {
		if (task != null) {
			task.close();
		}
		if (engine != null) {
			engine.destroy();
		}
		Platform.shutdown();
	}

	@SuppressWarnings("unchecked")
	private void runReportPdf(Map reportName,String parameter) {

		IReportEngine engine = configReport();
		IRunAndRenderTask task = null;
		try {
			IReportRunnable design = null;
			// String prefix = "C:\\apache-tomcat-6.0.18\\webapps\\WebViewerExample\\report\\";
			String prefix ="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\WebViewerExample\\report";
			HTMLRenderOption options = new HTMLRenderOption();
			String pathPrefix = "D:\\birtReportWork/output/";
			// String pathPrefix = "E:\\output/";
			// System.out.println(pathPrefix + reportName + "." + format);
			for (Object o : reportName.entrySet()) {
				Map.Entry<String, String> m = (Map.Entry<String, String>)o;
				//logger.info("email-" + m.getKey() + ":" + m.getValue());
				String key = m.getKey();
				String value = m.getValue();
				String[] list = key.split(",");
				for (int i = 0; i < list.length; i++) {
					String end = ".rptdesign";
					design = engine.openReportDesign(prefix + list[i] + end); // 打开这个已经写好的报表文件
					task = engine.createRunAndRenderTask(design);
					task.setParameterValue("name", "china"); 
					System.out.println(list[i]);
					options.setOutputFileName(pathPrefix + list[i] + "."
							+ value); // 设置生成的pdf名称,动态的。
					options.setOutputFormat(value); // 设置显示格式为pdf,可以改成html
					options.setHtmlRtLFlag(false);
					options.setEmbeddable(false);
					task.setRenderOption(options);
					//task.setParameterValue("name", parameter);
					task.run();
				}
			}
			System.out.println("succuess");
			closeReport(task, engine);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void runReportExl(Map reportName,String parameter) {
		IReportEngine engine = configReport();
		IRunAndRenderTask task = null;
		try {
			IReportRunnable design = null;
			String prefix = "C:\\apache-tomcat-6.0.18\\webapps\\WebViewerExample\\report\\";
			// String prefix =
			// "C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\WebViewerExample\\report";
			 EXCELRenderOption options = new EXCELRenderOption();  //生成到xls
			// String pathPrefix = "D:\\birtReportWork/output/";
			String pathPrefix = "E:\\output/";
			// System.out.println(pathPrefix + reportName + "." + format);
			for (Object o : reportName.entrySet()) {
				Map.Entry<String, String> m = (Map.Entry<String, String>)o;
				//logger.info("email-" + m.getKey() + ":" + m.getValue());
				String key = m.getKey();
				String value = m.getValue();
				String[] list = key.split(",");
				for (int i = 0; i < list.length; i++) {
					String end = ".rptdesign";
					design = engine.openReportDesign(prefix + list[i] + end); // 打开这个已经写好的报表文件
					task = engine.createRunAndRenderTask(design);
					task.setParameterValue("name", "china"); 
					System.out.println(list[i]);
					options.setOutputFileName(pathPrefix + list[i] + "."
							+ value); // 设置生成的pdf名称,动态的。
					options.setOutputFormat(value); 
					task.setRenderOption(options);
					task.run();
				}
			}
			System.out.println("succuess");
			closeReport(task, engine);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


2.导出pdf是没有问题的,导出xls如果包含图片就看不到图片,现在还没有解决
java mail发送附件的方法:
public class SendMail {
	public  SendMail(String title, String from, String[] sendTo,String content, String[] fileNames){
		try {
			// MailSender mailsender = new MailSender();
			sendmail(title, from, sendTo, content, fileNames,
					"text/html;charset=utf-8");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public static void sendmail(String subject, String from, String[] to,
			String text, String[] filenames, String mimeType) throws Exception {
		// ResourceBundle mailProps = ResourceBundle.getBundle("mail");
		// 可以从配置文件读取相应的参数
		Properties props = new Properties();

		String smtp = "smtp.163.com"; // 设置发送邮件所用到的smtp
		String servername = "******@163.com";
		String serverpaswd = "***********";

		javax.mail.Session mailSession; // 邮件会话对象
		javax.mail.internet.MimeMessage mimeMsg; // MIME邮件对象

		props = java.lang.System.getProperties(); // 获得系统属性对象
		props.put("mail.smtp.host", smtp); // 设置SMTP主机
		props.put("mail.smtp.auth", "true"); // 是否到服务器用户名和密码验证
		// 到服务器验证发送的用户名和密码是否正确
		EmailAutherticatorbean myEmailAuther = new EmailAutherticatorbean(
				servername, serverpaswd);
		// 设置邮件会话
		mailSession = javax.mail.Session.getInstance(props,
				(Authenticator) myEmailAuther);
		// 设置传输协议
		javax.mail.Transport transport = mailSession.getTransport("smtp");
		// 设置from、to等信息
		mimeMsg = new javax.mail.internet.MimeMessage(mailSession);
		if (!StringUtils.isEmpty(from)) {
			InternetAddress sentFrom = new InternetAddress(from);
			mimeMsg.setFrom(sentFrom); // 设置发送人地址
		}

		InternetAddress[] sendTo = new InternetAddress[to.length];
		for (int i = 0; i < to.length; i++) {
			System.out.println("发送到:" + to[i]);
			sendTo[i] = new InternetAddress(to[i]);
		}

		mimeMsg.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO,
				sendTo);
		mimeMsg.setSubject(subject, "gb2312");

		MimeBodyPart messageBodyPart1 = new MimeBodyPart();
		// messageBodyPart.setText(UnicodeToChinese(text));
		messageBodyPart1.setContent(text, mimeType);

		Multipart multipart = new MimeMultipart();// 附件传输格式
		multipart.addBodyPart(messageBodyPart1);

		for (int i = 0; i < filenames.length; i++) {
			MimeBodyPart messageBodyPart2 = new MimeBodyPart();
			// 选择出每一个附件名
			String filename = filenames[i].split(",")[0];
			System.out.println("附件名:" + filename);
			String displayname = filenames[i].split(",")[1];
			// 得到数据源
			FileDataSource fds = new FileDataSource(filename);
			// 得到附件本身并至入BodyPart
			messageBodyPart2.setDataHandler(new DataHandler(fds));
			// 得到文件名同样至入BodyPart
			// messageBodyPart2.setFileName(displayname);
			// messageBodyPart2.setFileName(fds.getName());
			messageBodyPart2.setFileName(MimeUtility.encodeText(displayname));
			multipart.addBodyPart(messageBodyPart2);
		}
		mimeMsg.setContent(multipart);
		// 设置信件头的发送日期
		mimeMsg.setSentDate(new Date());
		mimeMsg.saveChanges();
		// 发送邮件
		transport.send(mimeMsg);
		transport.close();
	}
}


还有个辅助类
public class EmailAutherticatorbean extends Authenticator {
	private String m_username = null;
	private String m_userpass = null;

	public void setUsername(String username) {
		m_username = username;
	}

	public void setUserpass(String userpass) {
		m_userpass = userpass;
	}

	public EmailAutherticatorbean(String username, String userpass) {
		super();
		setUsername(username);
		setUserpass(userpass);

	}

	public PasswordAuthentication getPasswordAuthentication() {

		return new PasswordAuthentication(m_username, m_userpass);
	}
}


这样就实现了报表附件的发送!
birt报表开发:
现在还在继续中,只做了几张,不过有写问题解决还是靠 ‘呼唤’大哥的帮忙
http://www.birthome.cn上有很多教程,做报表可以学习很多,如果碰到问题提问,呼唤会第一时间回答你的!差不多了,现在想到的就这么多以后补
分享到:
评论

相关推荐

    zongjiebaogao.rar_final project_项目总结报告

    【描述】"项目总结报告" 指出这是一份对某个IT项目进行全面回顾和分析的文件,旨在总结项目从启动到结束的全过程,包括目标设定、团队协作、技术实施、问题解决、项目管理等方面的情况。 【标签】"final_project ...

    IT项目管理表格(经常用到的表格基本都包括)

    5. **项目关闭**:正式通知所有相关人员项目结束,更新组织过程资产。 这些IT项目管理表格通常包括但不限于项目启动文档、需求文档、计划表、进度报告、变更请求表、风险管理表、质量检查表和项目总结报告等。有效...

    IT项目管理表格大全

    IT项目管理是信息技术行业中至关重要的一个领域,它涵盖了规划、执行、监控以及结束项目的一系列过程,以确保项目能够按时、按预算、按质量完成。本资料包“IT项目管理表格大全”提供了一系列全面的工具,帮助项目...

    项目/俄罗斯方块.java

    以下是关于这个项目的一些关键知识点: 1. **基本概念** - **Java基础**:本项目的基础是Java编程语言,因此需要掌握Java的基本语法、面向对象编程(OOP)以及异常处理等核心概念。 - **图形用户界面(GUI)**:...

    秋季项目管理网上作业及答案.doc

    【项目管理】 项目管理是一门综合性的...以上就是项目管理作业中涉及的一些核心概念和知识点,它们涵盖了成本管理、沟通管理、风险管理、采购管理、合同管理等多个领域。理解并掌握这些知识对于成功管理项目至关重要。

    JAVA实战项目源码-计算机毕业设计java专业-项目源码-项目说明介绍-JAVA002打飞机游戏设计

    - **结论与展望**:总结项目成果,对未来可能的改进方向进行展望。 这个项目不仅提供了实践机会,也是深入学习Java编程和软件工程的宝贵资料。通过分析和修改源码,学生能够进一步提升编程能力,了解游戏开发的...

    基于项目化教学模式的机械CAD教学改革探索.pdf

    本文讨论了项目教学法在机械CAD教学改革中的具体应用,并提出了一些实施建议。 一、项目教学法的主要特点 项目教学法的核心是项目,它通过将教学内容划分为多个模块,组织学生围绕实际项目进行合作学习。这种方法...

    开关控制多个灯-中断技术应用项目.7z

    在这个项目中,我们可能用到了单片机或者微控制器作为核心处理单元,通过连接多个开关到其输入引脚,实现对多盏灯的控制。每个开关的闭合或断开会产生一个中断请求,CPU接收到请求后,根据中断向量找到对应的中断...

    项目管理五阶段表单模版汇总.zip

    项目管理是组织、规划、执行和控制任何有明确目标的临时性工作的过程,通常在商业、工程或技术领域中应用广泛。"项目管理五阶段"指的是项目的生命周期,它包括启动、规划、执行、监控和收尾五个关键阶段。这个压缩包...

    pmp总结图片版.docx

    例如,启动过程组中的关键输入是商业论证和批准的项目章程,输出是初步的项目范围说明书,而可能用到的工具技术包括专家判断和会议等。 备考PMP时,4~13章是核心章节,涵盖了十大知识领域的主要内容,如: 1. 整合...

    关于嵌入式产品项目流程实例

    项目结束后,进行总结与评估,评价项目绩效,为未来项目提供参考。主要成果为: - **项目回顾会议**:分析项目执行过程中的得失,总结经验教训。 - **绩效考核**:评估项目成员的表现,激励团队成长。 #### 七、...

    配电箱安装分项工程项目质量技术交底卡

    施工过程中,需要用到铅笔、卷尺、水平尺等测量工具,以及手锤、剥线钳、电钻等安装工具。 四、质量要求 根据《建筑电气工程施工质量验收规范》(GB50303-2002),对高压开关柜、低压成套柜和照明配电箱的质量控制有...

    基于Springboot的秒杀系统(有报告) Javaee项目,springboot项目

    3. **关键技术**:解释选用的特定技术和工具,并说明其在项目中的作用。 4. **实现过程**:步骤分解,展示如何从零开始构建系统。 5. **性能测试与优化**:通过压力测试分析系统性能,并提出优化方案。 6. **项目...

    基于PHP的新版渠成项目管理系统Alpha1.zip

    总结来说,"基于PHP的新版渠成项目管理系统Alpha1.zip"代表了一个使用PHP技术开发的项目管理应用的早期版本,涵盖了项目管理的多种功能,并且依赖于成熟的PHP框架和Web开发技术。对于开发者来说,理解和掌握这些技术...

    项目开发计划书(练习).doc

    为避免沟通误解,计划书中需列出项目中可能用到的专业术语和缩写词,确保所有相关人员对这些词汇有共同的理解。 #### 1.4 参考资料 列举参考文献、类似项目案例或相关标准,以支持项目计划的制定,确保其科学性和...

    软件项目开发的实施计划书模板.doc

    - **定义**:列出项目中可能用到的专业术语和缩写,避免沟通中的误解。 - **参考资料**:列出用于编写计划书的参考文献、研究数据和其他相关资料,为读者提供更深入的背景信息。 2. **项目概述** - **工作内容**...

    射击弹球小游戏项目总结。学到了很多

    在本项目“射击弹球小游戏”中,开发者通过实践学习并掌握了多项重要的IT技术与编程概念,这将有助于深入理解游戏开发的过程以及软件工程的基本原理。以下是对该项目中涉及的知识点的详细阐述: 1. **游戏引擎基础*...

    软件工程文档实例需求分析概要设计详细设计

    总结性报告通常在项目结束后编写,回顾项目的全过程,总结经验教训,为未来的项目提供参考。 可行性报告是在项目启动前进行的一项研究,评估项目的经济、技术、法律和社会可行性,决定项目是否值得投资和实施。 ...

    天猫双11项目组织协同.zip

    10. **后期总结**:活动结束后,对项目执行情况进行复盘,总结经验教训,为未来类似项目提供参考。 通过《天猫双11项目组织协同.pptx》这份文件,我们可以更深入地了解这些环节的具体操作和执行细节,从而提升在...

    软考高级项目管理师-项目采购管理思维导图

    项目采购管理过程中会用到各种工具和技术来支持上述活动的进行,包括但不限于: - **市场调研工具**:帮助了解市场状况,识别潜在供应商。 - **合同管理软件**:用于管理合同的生命周期,包括起草、审批、执行和...

Global site tag (gtag.js) - Google Analytics