利用itext 打印合同

1、 制作合同模板

1、    制作模板可以直接利用一款软件(Adobe Acrobat DC),可以在网上找免费破解版的,如果没有找到合适的版本,可以去我的百度云盘下载,地址:链接: http://pan.baidu.com/s/1c3qYj8 密码: xewr,软件安装这里就不说了。

2、    打开Adobe Acrobat DC,选择工具—准备表单

3、    选择文件—开始 ,然后进入模板制作界面。

4、    在需要填入内容处,填入对应的字段,如name,idCard…等,关于填字段的一些常用方法技巧,可参考附件2- Adobe Acrobat DC字段填入方法。模板制作完成后,就可以进入代码开发了

2.2、 jar包准备

选择 iTextAsian.jar和itext-2.1.7.jar

3.control代码

/**
     * 根据合同id获取合同信息并生产合同
     * @param model
     * @param contractId
     * @return
     */
    @RequestMapping(value="/exportPDF/{contractId}")
    public String contractPrintPreview(Model model,@PathVariable("contractId")String contractId,HttpServletResponse response,HttpServletRequest request){
        
        // System.out.println("contractId: " + contractId);
        
        try {
            ContractAndRelatedInfoDto contractAndRelatedInfoDto = contractManagementService.queryContractAndRelatedInfoByContractId(contractId);
            Map<String,String> data = new HashMap<String,String>();
            
            // 开始时间
            data.put("EFFECTIVE_TIME", contractAndRelatedInfoDto.getContractInfoDto().getEffectiveDate());
            // 截止时间
            data.put("END_TIME", contractAndRelatedInfoDto.getContractInfoDto().getEndDate());
            // 有效期
            String periodTime = contractAndRelatedInfoDto.getContractInfoDto().getPeriodOfValidity();
            String[] periodArr =  periodTime.split("\\u002B");
            if(periodArr.length > 1){
                int total = 0;
                for(int i = 0; i < periodArr.length; i++){
                    String str = periodArr[i];
                    str = str.substring(0, str.length()-2);
                    total += Integer.valueOf(str);
                }
                periodTime = String.valueOf(total);
            }else{
                periodTime = periodTime.substring(0, periodTime.length()-2);
            }
            data.put("PERIOD_OF_VALIDITY", periodTime);
            // 总课时数
            data.put("TOTAL_COURSE_NUM", contractAndRelatedInfoDto.getContractInfoDto().getCourseNum());
            // 课程金额
            data.put("TOTAL_COURSE_PRICE", contractAndRelatedInfoDto.getContractInfoDto().getCourseAmount());
            
            // 所属中心名
            data.put("C_ID", contractAndRelatedInfoDto.getContractInfoDto().getCenterName());
            
            data.put("Signature", contractAndRelatedInfoDto.getContractInfoDto().getContractId());
            // System.out.println("Signature: " + contractAndRelatedInfoDto.getContractInfoDto().getContractId());
            
            // 数据
            model.addAttribute(PdfStamperView.DATA, data);
            // 文件名称
            model.addAttribute(PdfStamperView.FILENAME, "学员培训协议_" + contractAndRelatedInfoDto.getContractInfoDto().getContractId() + ".pdf");
            //同时生成一条打印记录
            savePrintRecord(contractAndRelatedInfoDto.getContractInfoDto().getContractCode());
            
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
        
        return "contract";
    }

4.spring mvc的代码 id对应 contract


    <!-- 按照BeanName解析视图   优先使用此视图解析,避免先被解析为JSP   -->  
      <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">  
        <property name="order" value="1" />
    </bean>  
          
    <!-- 定义Pdf模版视图 -->  
    <bean id="contract" class="com.gymboree.cos.fin.contract.info.view.PdfStamperView">  
        <property name="url" value="/WEB-INF/template/contract_template.pdf" />  
    </bean>

5. class对应PdfStamperView类 实现AbstractPdfStamperView

package com.gymboree.cos.fin.contract.info.view;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.view.document.AbstractPdfStamperView;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfStamper;
 
/**
 * 打印PDF的view
 * @author Administrator
 *
 */
public class PdfStamperView extends AbstractPdfStamperView {  
 
    public static final String DATA = "data";  
    public static final String FILENAME = "mergePdfFileName";  
 
    @Override  
    protected void mergePdfDocument(Map<String, Object> model,  
            PdfStamper stamper, HttpServletRequest request,  
            HttpServletResponse response) throws Exception {
        // 设置文件已附件形式下载
        // response.setHeader("Content-Disposition", "attachment;filename=" + new String(model.get(FILENAME).toString().replaceAll(" ", "").getBytes("UTF-8"), "ISO8859-1"));  
        // 获取pdf模板上设置的变量
        AcroFields fields = stamper.getAcroFields();
        
        // 使用本机自带字体
        // BaseFont bf = BaseFont.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
        BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
        //BaseFont bf = BaseFont.createFont("/usr/share/fonts/TTF/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
        ArrayList<BaseFont> arrayList = new ArrayList<BaseFont>();
        arrayList.add(bf);
        // 设置模板上字体的格式
        fields.setSubstitutionFonts(arrayList);
        // 填充模板上数据
        fillData(fields, (Map<String, String>) model.get(DATA));
        // System.out.println(((Map<String, String>) model.get(DATA)).get("Signature"));
        // 设置文本域是否可以编辑 true:不可以编辑
        stamper.setFormFlattening(true);
    }  
 
    private void fillData(AcroFields fields, Map<String, String> data)  
            throws IOException, DocumentException {  
        for (String key : data.keySet()) {  
            String value = data.get(key);  
            fields.setField(key, value);  
        }  
    }  
 
}  

   出现的界面即是在线预览模式


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值