pdf插入数据并下载

首先需要一个pdf模板,Adobe Acrobat 9 Pro里的表单插入文本域即可。

然后是导出pdf工具类

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

/**
 * 
 * 导出pdf工具类<br>
 * 导出pdf工具类
 * 
 */
public class ExportPdfUtil {
    /*
     * 日志
     */
    static Logger logger = LoggerFactory.getLogger(ExportPdfUtil.class);

    /**
     * 
     * 导出pdf工具类 <br>
     * 导出pdf工具类
     * 
     * @param outpath
     * @param fontPath
     * @param templateName
     * @param paraMap
     * @return
     * @see [相关类/方法](可选)
     */
    public static String exportpdf(String outpath, String templateName, String fontPath, Map<String, String> paraMap,String pdfPath) {
       

        // 得到当前时间
        Date now = new Date();
        SimpleDateFormat dataformat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
        String t = dataformat.format(now);

        // 得到一个随机数
        String ran = Math.random() + "";

        // 以当前时间加上一个随机数获取下载的文件以保证不重名
        String filename = t + "-" + ran;
        // 定义pdf完整路径
//        String url = Pdf2SwfUtil.class.getResource("Pdf2SwfUtil.class").getFile().toString();
//        logger.debug("[exportpdf] class URL = "+url);
//        String address = url.substring(CommonConstants.NumeralConstant.ZERO,
//                url.lastIndexOf("Pdf2SwfUtil"))+"pdf/"+templateName;
//        logger.debug("[exportpdf] address URL = "+address);
        String address = pdfPath  + templateName;
        
        
        String savepath = outpath + File.separator + filename + ".pdf";
        logger.debug("[exportpdf] savepath URL = "+savepath);
        PdfReader reader = null;
        ByteArrayOutputStream bos = null;
        PdfStamper ps = null;
        FileOutputStream fos = null;
        try {

            // 创建字体
            BaseFont chineseSong = BaseFont.createFont(fontPath + "/simsun.ttc,1", BaseFont.IDENTITY_H,
                    BaseFont.EMBEDDED);
            

            // 读取pdf
            reader = new PdfReader(address);
            bos = new ByteArrayOutputStream();
            ps = new PdfStamper(reader, bos);

            AcroFields s = ps.getAcroFields();

            // 添加所创建的字体
            s.addSubstitutionFont(chineseSong);

            //找到pdf中输入域并替换为内容
            int i = 1;
            for (Iterator<String> it = s.getFields().keySet().iterator(); it.hasNext(); i++) {
                String name = (String) it.next();
                s.setField("" + name.trim(), paraMap.get(name.trim()));
            }

            //这两步必须有,否则pdf生成失败
            ps.setFormFlattening(true);
            ps.close();

            //输出pdf
            fos = new FileOutputStream(savepath);
            fos.write(bos.toByteArray());

        } catch (FileNotFoundException e) {
            logger.error("FileNotFoundException");
        } catch (Exception e) {
            logger.error("Exception");
        } finally {
            if (null != reader) {
                reader.close();
            }
            try {
                if (null != bos) {
                    bos.close();
                }
            } catch (IOException e) {
                logger.debug("failed to close ByteArrayOutputStream ");
                logger.debug("关闭ByteArrayOutputStream失败", e);
            }
            try {
                if (null != ps) {
                    ps.close();
                }
            } catch (DocumentException e) {
                logger.debug("failed to close PdfStamper ");
                logger.debug("关闭PdfStamper失败", e);
            } catch (IOException e) {
                logger.debug("failed to close PdfStamper ");
                logger.debug("关闭PdfStamper失败", e);
            }
            try {
                if (null != fos) {
                    fos.close();
                }
            } catch (IOException e) {
                logger.debug("failed to close FileOutputStream ");
                logger.debug("关闭FileOutputStream失败", e);
            }

        }

        return filename;
    }
    
    
    
}

下载操作公共类

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 
 * 下载操作公共类
 * 
 * 
 */
public class DownLoadUtil {

    /**
     * 日志打印
     */
    private static Logger logger = LoggerFactory.getLogger(DownLoadUtil.class);

    /**
     * 
     * 下载: <br>
     * 
     * @param savePath
     * @param filename
     * @param response
     * @see
     * @since 3.3
     */
    public static void download(String savePath, String filename, boolean deleteFlag, HttpServletResponse response) {
        File f = new File(savePath);
        if (f.exists()) {
            // 设置response的相应消息头
            response.setContentType("application/pdf");
            response.setIntHeader("Expires", 0);
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
            response.addHeader("Cache-Control", "public");
            FileInputStream in = null;
            try {
                String newFilename = new String(filename.getBytes("gbk"), "iso8859-1");
                response.setHeader("Content-Disposition", "attachment;filename=" + newFilename);
                // 创建一 个输入流对象和指定的文件相关联
                in = new FileInputStream(f);
                OutputStream out = response.getOutputStream();
                byte[] buff = new byte[PdfAndFlashConstants.Common.THOUSAND];
                int len = CommonContants.NumeralConstant.ZERO;
                while ((len = in.read(buff)) > PdfAndFlashConstants.Common.ZERO) {
                    out.write(buff, PdfAndFlashConstants.Common.ZERO, len);
                }
                out.flush();
                out.close();
            } catch (UnsupportedEncodingException e) {
                logger.error("IO错误");
            } catch (IOException e) {
                logger.error("IO错误");
            } finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException e) {
                    logger.error("关闭IO错误");
                } finally {
                    if (deleteFlag) {
                        if (f.delete()) {
                            logger.debug("删除成功");
                        } else {
                            logger.error("删除失败");
                        }
                    }
                }
            }
        } else {
            logger.error("文件不存在");

        }
    }
}


controller层

  @RequestMapping("/getPdf")
  public void getPdf(@RequestParam(value = "fncAplyId",required=false) String fncAplyId,HttpServletResponse response) {
	  SingleFinanceEntity bean = singleFinanceService.getBeanByFncAppyId(fncAplyId);
      String pdfname = this.genaratePdf(bean);
      String filename ="练习--"+bean.getFncAplyId()+".pdf";
      WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
      ServletContext servletContext = webApplicationContext.getServletContext();
      String pdfandflash = servletContext.getRealPath("js"+File.separator+"PDF") +File.separator;
      DownLoadUtil.download(pdfandflash + File.separator + pdfname + ".pdf",
              filename, true, response);
  }
  
  private Map<String, String> getMap(SingleFinanceEntity financeEntity){
		Map<String, String> map = new HashMap<String, String>();
		OpCompanyContractEntity contract = contractService.queryContractBy(financeEntity.getMainContractCode());
		map.put("id", financeEntity.getLoanNo());
		map.put("custName", financeEntity.getCustName());
		String validStartDate = contract.getValidStartDate();
		map.put("signYear", validStartDate.substring(0, 4));
		map.put("signMonth", validStartDate.substring(5, 7));
		map.put("signDay", validStartDate.substring(8, 10));
		map.put("parentCode", contract.getContractCode());
		DecimalFormat df = new DecimalFormat("###.##");
		map.put("lmoney", df.format(financeEntity.getAppLoanAmt()));
		map.put("umoney", MoneyUtil.numToChinese(financeEntity.getAppLoanAmt().toString()));
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String nowDate = formatter.format(financeEntity.getConfirmDate() == null ?new Date() : financeEntity.getConfirmDate());
		map.put("nowYear", nowDate.substring(0, 4));
		map.put("nowMonth", nowDate.substring(5, 7));
		map.put("nowDay", nowDate.substring(8, 10));
		map.put("forDay", financeEntity.getForbidPeriod());
		map.put("infoDay", financeEntity.getFncPd());
		map.put("fncRate", df.format(financeEntity.getFncAnnRt()));
		map.put("Rate", "0");
		map.put("flRate", "50");
		return map;
	}
  
  public String genaratePdf(SingleFinanceEntity bean) {
      Map<String, String> map = getMap(bean);
      String templateName = "DBRZXY.pdf";
      WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
      ServletContext servletContext = webApplicationContext.getServletContext();
      // 得到文件绝对路径
      String pdfandflash = servletContext.getRealPath("js"+File.separator+"PDF") +File.separator;
      return ExportPdfUtil.exportpdf(pdfandflash, templateName, pdfandflash,
              map,pdfandflash);
  }

getmap也可以设置成String object。后期可优化










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值