最近项目中需要根据商户提交的资料生成申诉文件进行下载,比较了一圈觉得用itest还是蛮方便的
参考:http://noknower.iteye.com/blog/272011
pom.xml中的配置
<dependency>
<groupId>itext</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <dependency> <groupId>itext</groupId> <artifactId>itextasian</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>itext</groupId> <artifactId>itext-rtf</artifactId> <version>2.1.7</version> </dependency>Controller中的代码
@RequestMapping(value = "/appealModelDownload.htm", method = RequestMethod.POST)
public String appealModelDownload(HttpServletResponse response, String proId, String handleType,String instCode,ModelMap model) throws Exception { PortestAppealModelDTO portestAppeal = null; portestAppeal = protestAppealModelDomain.selectByProId(proId); if(portestAppeal!=null){ Document doc = new Document(PageSize.A4); ByteArrayOutputStream bos = new ByteArrayOutputStream(); RtfWriter2.getInstance(doc, bos); //开始写入 doc.open(); //设置标题 Paragraph p = new Paragraph("Transaction Receipt",new Font(Font.NORMAL,18,Font.BOLD,new Color(0,0,0))); p.setAlignment(Element.ALIGN_CENTER); doc.add(p); doc.add(new Paragraph("订单号(Order Number): "+portestAppeal.getMerchantOrderNo(),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); String bankAccountNO; if("MLTP011".equals(instCode)){ bankAccountNO=portestAppeal.getBankAccountNo(); }else{ bankAccountNO =pCIDomain.aesDecrypt(portestAppeal.getBankAccountNo()); } doc.add(new Paragraph("卡号(Account Number): "+bankAccountNO,new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("交易日期(Transaction Date): "+DateUtil.format(portestAppeal.getDealTime(), "yy/MM/dd"),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("交易金额(Transaction Amount): "+portestAppeal.getTradeAmount()+portestAppeal.getTradeCurrency(),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("授权号(Authorization Code): "+(portestAppeal.getAuthCode()!=null?portestAppeal.getAuthCode():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("商户英文名称(Merchant Name): "+(portestAppeal.getEnName()!=null?portestAppeal.getEnName():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("商户名称(Merchant Name): "+(portestAppeal.getZhName()!=null?portestAppeal.getZhName():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); String bgurl = portestAppeal.getBgUrl(); if(StringUtil.isNotBlank(bgurl) && bgurl.indexOf("/", 10) >= 0){ bgurl = bgurl.substring(0, bgurl.indexOf("/", 10)).replace("https://", "").replace("http://", ""); } doc.add(new Paragraph("商户网址(Merchant Location): "+(bgurl!=null?bgurl:""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("购买者(Purchaser): "+(portestAppeal.getBillName()!=null?portestAppeal.getBillName():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("购买者电话(Purchaser's Telephone): "+(portestAppeal.getBillPhoneNumer()!=null?portestAppeal.getBillPhoneNumer():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("购买者地址(Purchaser's Address): "+(portestAppeal.getBillAdderess()!=null?portestAppeal.getBillAdderess():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("购买者email(Purchaser's E-mail): "+(portestAppeal.getBillEmail()!=null?portestAppeal.getBillEmail():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("收货人(Recipient): "+(portestAppeal.getReceiveName()!=null?portestAppeal.getReceiveName():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("收货人电话(Recipient's Telephone): "+(portestAppeal.getReceiveTel()!=null?portestAppeal.getReceiveTel():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("收货地址(Shipping Address): "+(portestAppeal.getReceiveAddress()!=null?portestAppeal.getReceiveAddress():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("收货人email(Recipient's E-mail): "+portestAppeal.getReceiveEmail(),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("快递公司(Carrier): "+(portestAppeal.getExpressCompany()!=null?portestAppeal.getExpressCompany():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("快递追踪号(Tracking Number): "+(portestAppeal.getExpressNumber()!=null?portestAppeal.getExpressNumber():""),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("商品/服务(Merchandise/Services): "+portestAppeal.getBizType().getDescription(),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); if(!"0".equals(handleType)){ doc.add(new Paragraph("Merchant Letter",new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph("To whom might concern,",new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); doc.add(new Paragraph(portestAppeal.getRemark(),new Font(Font.NORMAL, 10, Font.COURIER, new Color(0, 0, 0)))); //遍历上传的截图 List<PortestAppealImageDTO> imageList = new ArrayList<PortestAppealImageDTO>(); imageList = protestAppealImageDomain.queryAppealImageByAppealId(portestAppeal.getId()); if(imageList.size()>0){ for(PortestAppealImageDTO imageDto:imageList){ Image img=Image.getInstance(imageDto.getImage()); img.setAbsolutePosition(0, 0); img.setAlignment(Image.LEFT);//设置图片显示位置 img.scaleAbsolute(12,35);//直接设定显示尺寸 img.scalePercent(50);//表示显示的大小为原尺寸的50% img.scalePercent(25, 12);//图像高宽的显示比例 img.setRotation(30);//图像旋转一定角度 doc.add(img); //doc.add(new Paragraph("/n")); } } } doc.close();// 关闭写入 byte[] exByte = bos.toByteArray(); // 设置文件类型 response.setContentType("application/msword"); response.setCharacterEncoding("utf-8"); response.setContentLength(exByte.length); response.setHeader("Content-Disposition", "attachment;filename=" + portestAppeal.getMerchantCode() + ".doc"); OutputStream out = response.getOutputStream(); out.write(exByte); out.flush(); out.close(); } return null; }