`

java 调ireport (javaBean数据源)保存服务器 生成word

阅读更多
package com.ztesoft.bidding.contract;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import net.buffalo.common.BaseAppCONST;
import net.buffalo.common.DAOFactory;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.util.JRLoader;

import com.ztesoft.bidding.contract.dao.ContractInfoDAO;
import com.ztesoft.bidding.contract.vo.ContractVO;

public class ContractInfoService {

	private ContractInfoDAO contractInfoDAO = null;

	public ContractInfoService() {
		contractInfoDAO = (ContractInfoDAO) DAOFactory
				.getDAO(ContractInfoDAO.class);
	}

	/*
	 * @生成合同模板
	 */

	public void createContract(int procurementItemId, int contractId)
			throws SQLException {
		try {
			//保存服务器路径
			String FileUrl = BaseAppCONST.getProperty("upload.contractPath");
			/*String root_path = this.getServletContext().getRealPath("");
			System.out.println(root_path);*/
			String fineNameId = "合同模板" + String.valueOf(contractId);
			String reportFilePath = "F:\\tomcat-5.5\\webapps\\BiddingOnline\\WEB-INF\\classes\\com\\ztesoft\\bidding\\contract\\jspreport\\javaBean.jasper ";
			File reportFile1 = new File(reportFilePath);
			if (!reportFile1.exists())
				throw new JRRuntimeException("没找到合同模板路径");
			JasperReport jasperReport1 = (JasperReport) JRLoader
					.loadObject(reportFile1.getPath());

			//-------数据传输------------------
			List<testVo> data = new ArrayList<testVo>();

			testVo TestVo1 = new testVo();
			TestVo1 = dataSource(procurementItemId);
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("partnerName", TestVo1.getPartnerName());
			map.put("contactMan", TestVo1.getContactMan());
			map.put("contactTel", TestVo1.getContactTel());
			map.put("bank", TestVo1.getBank());
			map.put("account", TestVo1.getAccount());
			map.put("buyerName", TestVo1.getPartyName());
			map.put("exDate", TestVo1.getExDate().toString());
			map.put("address", TestVo1.getAddress());
			map.put("pContactMan", TestVo1.getPContactMan());
			map.put("pContactPhone", TestVo1.getPContactPhone());

			//一条记录就是个vo
			List<testVo> list4 = (List<testVo>) contractInfoDAO
					.countInfo(procurementItemId);
			List<testVo> list5 = (List<testVo>) contractInfoDAO
					.parts(procurementItemId);
			String name = null;
			String remark = null;
			String budgetAmount = null;
			String price = null;
			//金额大小写转换   对于最后总价价格total_price
			String totalPrice = list4.get(0).getTotalPrice();
			map.put("totalPrice", totalPrice);
			double BigTotalPrice = Double.parseDouble(totalPrice);
			String ChineseCurrency = bigMoney(new Double(BigTotalPrice));
			map.put("bigTotalPrice", ChineseCurrency);
			//得到商品及其配件 价格,数量,总价, 
			int count = list4.size() + list5.size();
			for (int i = 0; i < count; i++) {
				testVo TestVo = new testVo();
				if (list4.size() > i) {
					name = list4.get(i).getName();
					remark = list4.get(i).getRemark();
					budgetAmount = list4.get(i).getBudgetAmount();
					price = list4.get(i).getPrice();
					TestVo.setName(name);
					TestVo.setRemark(remark);
					TestVo.setBudgetAmount(budgetAmount);
					TestVo.setPrice(price);
				} else {
					int k = i - list4.size();
					name = list5.get(k).getName();
					remark = list5.get(k).getRemark();
					TestVo.setName(name);
					TestVo.setRemark(remark);
					TestVo.setPrice("0");
				}
				data.add(TestVo);
			}
			JRDataSource dataSource = new JRBeanCollectionDataSource(data);
			/**********数据传输***************/
			JasperPrint jasperPrint1 = JasperFillManager.fillReport(
					jasperReport1, map, dataSource);

			JRExporter exporter = null;
			exporter = new JRRtfExporter();
			List reportlist = (List) new java.util.ArrayList();
			reportlist.add(jasperPrint1);
			System.out.println(reportlist.size() + "数据正常传出");
			byte[] bytes;
			ByteArrayOutputStream baos = new ByteArrayOutputStream();

			exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST,
					reportlist);
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

			exporter.setParameter(JRExporterParameter.JASPER_PRINT,
					jasperPrint1);
			exporter.exportReport();
			
			
			bytes = baos.toByteArray();
			/****************************/
			ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

			POIFSFileSystem fs = new POIFSFileSystem();
			DirectoryEntry directory = fs.getRoot();

			DocumentEntry de = directory.createDocument("WordDocument", bais);
			//String fineName = "合同模板";
			String path = FileUrl + fineNameId + ".doc";
			FileOutputStream ostream = new FileOutputStream(path);
			fs.writeFilesystem(ostream);

			//插入合同路径文件名称,如果数据库中有该文档则提示用户
			String datePath = contractInfoDAO.getPath(contractId);
			if (path.equals(datePath)) {
				System.out.println("已经存在此文档");
			} else {
				insertContract(fineNameId, path);
			}
			bais.close();
			ostream.close();
		} catch (JRException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/* @创建合同信息
	 * @将文件名和路径加入文档库
	 * @1合同名称 2 path
	 */
	public void insertContract(String fineName, String path)
			throws SQLException {
		contractInfoDAO.addContract(fineName, path);
	}

	/*
	 * @取得文件的路径根据合同的id
	 */

	public String getPath(int contractId) throws SQLException {
		System.out.println(contractInfoDAO.getPath(contractId));
		return contractInfoDAO.getPath(contractId);
	}

	/*
	 * @取得数据源

	 */
	public testVo dataSource(int procurementItemId) throws SQLException {
		/**
		 * 根据采购结果查询供应商信息 查询出来的是一天供应商信息
		 * @Title: 
		 * @Description: contactMan;    供应商联系人
		 * @param @param contactTel ;   供应商联系电话

		 * @param @param  bank;         银行
		 * @param @param Account        账户
		 * @param @param  exDate;       交货期

		 * @param @param  address;       交货地点   
		 * @param @param pContactMan;    采购联系人  
		 */
		testVo TestVo = new testVo();
		List<testVo> list = (List<testVo>) contractInfoDAO
				.supplierInfo(procurementItemId);
		String partnerName = list.get(0).getPartnerName();
		String contactMan = list.get(0).getContactMan();
		String contactTel = list.get(0).getContactTel();
		String bank = list.get(0).getBank();
		String account = list.get(0).getAccount();
		TestVo.setPartnerName(partnerName);
		TestVo.setContactMan(contactMan);
		TestVo.setContactTel(contactTel);
		TestVo.setBank(bank);
		TestVo.setAccount(account);
		//采购单位
		List<testVo> list2 = (List<testVo>) contractInfoDAO
				.buyerName(procurementItemId);
		String buyerName = list2.get(0).getPartyName();
		/**
		 * 根据采购结果查询供应商信息 查询出来的是一天供应商信息
		 * @Title: 
		 * @param @param exDate ;   交货期

		 * @param @param  address;         交货地点
		 * @param @param pContactMan        采购联系人

		 * @param @param  pContactPhone;       采购联系人

		 */
		TestVo.setPartyName(buyerName);
		List<testVo> list3 = (List<testVo>) contractInfoDAO
				.contractItem(procurementItemId);
		Date exDate = list3.get(0).getExDate();
		String address = list3.get(0).getAddress();
		String pContactMan = list3.get(0).getPContactMan();
		String pContactPhone = list3.get(0).getPContactPhone();

		TestVo.setExDate(exDate);
		TestVo.setAddress(address);
		TestVo.setPContactMan(pContactMan);
		TestVo.setPContactPhone(pContactPhone);

		return TestVo;
	}

	/*
	 * @金额换算大写
	 */
	public String bigMoney(Object ob) {
		String s = new DecimalFormat("#.00").format(ob);
		s = s.replaceAll("\\.", "");// 将字符串中的"."去掉
		char d[] = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
		String unit = "仟佰拾兆仟佰拾亿仟佰拾万仟佰拾元角分";
		int c = unit.length();
		StringBuffer sb = new StringBuffer(unit);
		for (int i = s.length() - 1; i >= 0; i--) {
			sb.insert(c - s.length() + i, d[s.charAt(i) - 0x30]);
		}
		s = sb.substring(c - s.length(), c + s.length());
		s = s.replaceAll("零[仟佰拾]", "零").replaceAll("零{2,}", "零").replaceAll(
				"零([兆万元Ԫ])", "$1").replaceAll("零[角分]", "");
		return s;
	}

}
分享到:
评论

相关推荐

    ireport利用javabean做数据源.docx

    在这个场景中,我们将讨论如何利用javabean作为ireport的数据源来生成报表。首先,我们需要理解javabean和ireport的基本概念。 **javabean** 是Java编程语言中的一种简单对象,遵循一定的规范,通常用于封装数据和...

    java调用ireport生成word报告

    ### Java调用iReport生成Word报告 #### 一、前言 本文档旨在详细介绍如何使用Java语言调用iReport工具来生成Word报告的过程。主要内容包括环境搭建、数据库配置、报表设计以及Java代码实现等方面。 #### 二、环境...

    iReport使用JavaBean做数据源

    在软件开发中,报表生成是一个常见的需求,而iReport是一款广泛使用的开源报表设计工具,它允许开发者创建复杂的报表,并支持多种数据源,包括数据库、XML、JavaBean等。本文将详细讲解如何在iReport中使用JavaBean...

    jasperreport+ireport创建javaBean多数据源报表

    2. **配置数据源**: 在ireport中,可以设置JavaBean数据源,指定JavaBean类名和属性映射。 3. **生成.jasper文件**: 保存并编译.jrxml文件,生成.jasper二进制模板。 4. **Java代码集成**: 在Java项目中,加载....

    ireport中table使用javaBean数据源

    本知识点主要探讨的是如何在iReport中使用JavaBean作为数据源来填充表格(Table)组件。我们将深入理解这个过程,并结合提供的资源进行详细阐述。 1. **JavaBean数据源的原理** JavaBean是一种符合特定规范的Java...

    jasperReport自定义javabean数据源实例

    本实例将详细介绍如何通过自定义JavaBean数据源来生成报表。 首先,理解JavaBean是一种符合特定规范的Java类,它通常具有公共getter和setter方法,用于封装对象的状态。在JasperReport中,JavaBean可以被用作数据源...

    ireport利用javabean做数据源实例

    【描述分析】:“简单明了利用javabean做数据源,实现ireport报表功能”描述意味着我们将学习一个简洁的方法,通过JavaBean将业务数据传递给iReport,以生成报表。这通常涉及到编写JavaBean类来封装数据,然后在...

    ireport+ javaBean 做数据源实例

    本实例将深入探讨如何使用ireport结合javaBean作为数据源来生成报表,帮助初学者快速掌握ireport的使用方法。 【描述】:“一看就会的实例。能够很快上手ireport” ireport因其直观的图形用户界面和强大的报表设计...

    iReport使用JavaBean作为数据源——最简单的示例

    本示例将向你展示如何利用iReport将JavaBean作为数据源,以生成定制化的报告。以下是对这个简单示例的详细解析: 1. **JavaBean作为数据源**:JavaBean是一种遵循特定规范的Java类,它封装了数据并提供了访问这些...

    图示ireport中使用javabean作数据源开发基于jasperreports报表过程

    在这个过程中,我们将深入探讨如何在`iReport`中使用`JavaBean`作为数据源来开发基于`JasperReports`的报表。 首先,我们需要了解`JavaBean`。`JavaBean`是一种符合特定规范的Java类,通常用于封装数据并提供公共...

    javabean用途ireport 数据源

    這是兩個用java作數據源的例子: 其中 javaBean 為用javaBean作數據源的例子 test 為用自定義數據源的例子 兩個例子都通過測試 想要的朋友可以下載看看! 祝大家玩得開心!

    ireport导出pdf和word文档实例

    `iReport`是一款开源的Java报表设计工具,它允许开发者创建复杂的报表布局,并能够导出为多种格式,如PDF和DOC(Word)。本文将详细介绍如何使用`iReport`来导出PDF和Word文档。 首先,`iReport`是JasperReports库...

    ireport(使用子报表(使用JavaBean集合作为数据源))

    本篇文章将专注于如何在IReport中使用子报表,并结合JavaBean集合作为数据源来生成报告。 首先,理解`子报表`的概念。子报表是报表中的一个区域,它可以独立设计并重复显示主报表中的数据。这样可以将复杂报表拆分...

    ireport多数据源

    在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式

Global site tag (gtag.js) - Google Analytics