/** * @Project: hehenian-web * @Package com.hehenian.web.view.trade.action * @Title: AgreementAction.java * @Description: TODO * @author: liuzgmf * @date 2014年12月19日 上午11:11:00 * @Copyright: HEHENIAN Co.,Ltd. All rights reserved. * @version V1.0 */ package com.hehenian.web.view.trade.action; import java.io.ByteArrayInputStream; import java.io.OutputStream; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import com.hehenian.biz.common.account.dataobject.AccountUserDo; import com.hehenian.biz.common.base.result.IResult; import com.hehenian.biz.common.trade.IBorrowService; import com.hehenian.web.common.contant.WebConstants; import com.itextpdf.text.Document; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; import com.opensymphony.xwork2.ActionSupport; import com.shove.util.AsianFontProvider; import freemarker.template.Template; /** * * @author: liuzgmf * @date 2014年12月19日 上午11:11:00 */ @Scope("prototype") @Controller("newAgreementAction") public class AgreementAction extends ActionSupport implements ServletRequestAware, SessionAware { private final Logger logger = Logger.getLogger(this.getClass()); private static final long serialVersionUID = 1L; @Autowired private FreeMarkerConfigurationFactory freeMarkerConfigurer; @Autowired private IBorrowService borrowService; private HttpServletRequest request; private Map<String, Object> session; private Long borrowId; @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } @Override public void setSession(Map<String, Object> session) { this.session = session; } /** * 借款协议 * * @return * @author: liuzgmf * @date: 2014年12月19日上午11:12:03 */ public String agreement() { try { AccountUserDo user = (AccountUserDo) session.get(WebConstants.SESSION_USER); Long userId = (user != null ? user.getId() : null); IResult<?> result = borrowService.queryAgreementParams(userId, borrowId); if (!result.isSuccess()) { request.setAttribute(WebConstants.MESSAGE_KEY, result.getErrorMessage()); return ERROR; } @SuppressWarnings("unchecked") Map<String, Object> params = (Map<String, Object>) result.getModel(); @SuppressWarnings("unchecked") Map<String, Object> borrow = (Map<String, Object>) params.get("borrow"); params.put("userId", userId); String templateFileName = getTemplateFileName((Integer) borrow.get("paymentMode")); Template template = freeMarkerConfigurer.createConfiguration().getTemplate(templateFileName); String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, params); // 创建PDF Document document = new Document(PageSize.A4, 25, 25, 25, 25); OutputStream out = ServletActionContext.getResponse().getOutputStream(); PdfWriter pdfWriter = PdfWriter.getInstance(document, out); document.open(); String path = ServletActionContext.getServletContext().getRealPath("images/admin/hhnxd-1.png"); Image image = Image.getInstance(path); XMLWorkerHelper worker = XMLWorkerHelper.getInstance(); worker.parseXHtml(pdfWriter, document, new ByteArrayInputStream(content.getBytes()), null, new AsianFontProvider()); image.setAbsolutePosition(350, 40);// 最后一页右下角 document.add(image);// 最后一页右下角 document.close(); return null; } catch (Exception e) { logger.error("Error while generate Agreement Content ", e); request.setAttribute(WebConstants.MESSAGE_KEY, "获取协议出错,请稍后再试!"); return ERROR; } } private String getTemplateFileName(Integer paymentMode) { if (paymentMode.intValue() == 5) { return "/agreement/agreement_group.ftl"; } else if (paymentMode.intValue() == 7) { return "/agreement/agreement_property.ftl"; } else if(paymentMode.intValue() == 8 || paymentMode.intValue() == 9 || paymentMode.intValue() == 10 || paymentMode.intValue() == 11){ return "/agreement/agreement_newJy.ftl"; } else { return "/agreement/agreement_default.ftl"; } } /** * @return borrowId */ public Long getBorrowId() { return borrowId; } /** * @param borrowId * the borrowId to set */ public void setBorrowId(Long borrowId) { this.borrowId = borrowId; } }