包:
<dependency>
<groupId>com.itextpdf.iText.core-renderer</groupId><artifactId>core-renderer</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.iText.iText</groupId>
<artifactId>iText</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>com.itextpdf.iText.iTextAsian</groupId>
<artifactId>iTextAsian</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.iText.iTextAsianCmaps</groupId>
<artifactId>iTextAsianCmaps</artifactId>
<version>1.0</version>
</dependency>
package com.leyidai.web.controller;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.leyidai.entity.Loan;
import com.leyidai.entity.Order;
import com.leyidai.entity.User;
import com.leyidai.entity.UserBank;
import com.leyidai.web.pay.client.util.BankUtils;
import com.leyidai.web.service.LoanService;
import com.leyidai.web.service.OrderService;
import com.leyidai.web.service.UserBankService;
import com.leyidai.web.util.GlobalVariable;
import com.leyidai.web.util.StringUtil;
@Controller
public class CreatePdfController {
@Autowired
private UserBankService userBankService;
@Autowired
private OrderService orderService;
@Autowired
private LoanService loanService;
@Value("#{systemConfigProperties[pdfPath]}")
private String pdfPath;
@RequestMapping(value = "/{orderid}/createItext.html")
public String testCreatePDF(@PathVariable("orderid")int orderid,HttpSession httpSession,HttpServletResponse response) throws Exception{
Map<String, Object> dataMap = new HashMap<String, Object>();
User user = (User) httpSession.getAttribute(GlobalVariable.userSession);
if(user==null)
return "404";
UserBank userBank = userBankService.getUserBankByUid(user.getId());
if(userBank==null)
return "404";
Order order = orderService.getOrderByIdAndUid(orderid,user.getId());
if(order == null)
return "404";
dataMap.put("mingzi",userBank.getHolderName());
System.out.println("userBank.getHolderName():"+userBank.getHolderName());
dataMap.put("shenfenzheng",userBank.getUserCard());
//交易金额
dataMap.put("jine",order.getOrderProjiectMoney());
dataMap.put("jinedaxie",StringUtil.Trans2RMB(order.getOrderProjiectMoney()));
dataMap.put("daozhangshijian","");
// //甲方监管开户行
dataMap.put("jianguanzhanghu","");
dataMap.put("jianguankaihuhang","");
dataMap.put("jianguankaihuzhanghao","");
//已方汇出与回收资金
dataMap.put("bankusername",userBank.getHolderName());
dataMap.put("bankname",BankUtils.getname(userBank.getBankCard()));
dataMap.put("bankcard",userBank.getBankCard());
//收益分配方式
dataMap.put("shouyifenpeifangshi","");
dataMap.put("shuangfanghezuoqixian","");
dataMap.put("yanqiqixian","");
//甲方联系方式
dataMap.put("jflianxiren","");
dataMap.put("jflianxidizhi","");
dataMap.put("jflianxidianhua","");
dataMap.put("jfchuanzhen","");
dataMap.put("jfdianziyoujian","");
// 乙方联系方式
dataMap.put("yflianxidizhi","");
dataMap.put("yflianxidianhua","");
dataMap.put("yfdianziyouxiang","");
dataMap.put("yfqq","");
dataMap.put("tiqiantianshu","10");
Loan loan = loanService.getLoanInfo(order.getOrderProjectId());
dataMap.put("xiangmubianhao","");
dataMap.put("yirenwoyinjiuzui",loan.getAssetname());
dataMap.put("zichanmianji",loan.getZichanmianji()+"㎡");
dataMap.put("touzijine",loan.getTotalmoney()+"元");
dataMap.put("yuqishouyi",loan.getExpectedrate()+"%");
dataMap.put("touziyuefen","");
dataMap.put("touziman","");
dataMap.put("budeyiyu","");
dataMap.put("shouyizuidi","");
dataMap.put("shouyizuigao","");
dataMap.put("chaoguobufen","");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
//签字
// dataMap.put("jifangqianzi","诚煜普信(天津)网络科技有限公司");
dataMap.put("qianzishijian",dateFormat.format(order.getOrderCreateTime()));
dataMap.put("yifangqianzi",userBank.getHolderName());
dataMap.put("yifangqianzishijian",dateFormat.format(order.getOrderCreateTime()));
convertTransData(dataMap,response);
System.out.println("执行完毕");
return null;
}
/**
* 将数据转换为输入字节流
* */
public InputStream convertTransData(Map<String, Object> dataMap,HttpServletResponse response)
throws Exception {
try {
InputStream in =new FileInputStream(new File(pdfPath+"//xieyi.pdf"));
ByteArrayOutputStream out =
(ByteArrayOutputStream)generate(
new PdfReader(in),dataMap
);
String fileName = "项目委托投资协议-合同.pdf";
ByteArrayInputStream ret =
new ByteArrayInputStream(out.toByteArray());
//将pdf字节流输出到文件流
ServletOutputStream fos = response.getOutputStream(); // 生成的新pdf输出流
response.setHeader("Content-Disposition", "attachment;fileName="
+ URLEncoder.encode(fileName, "UTF-8"));
fos.write(out.toByteArray());
fos.close();
out.close();
return ret;
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* 将数据,填入pdf表单域
*
* */
public OutputStream generate(PdfReader template,Map<String, Object> dataMap)
throws Exception {
BaseFont bf = BaseFont.createFont(pdfPath+"//fangzheng.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
PdfStamper stamp = new PdfStamper(template, out);
AcroFields form = stamp.getAcroFields();
// set the field values in the pdf form
for (Iterator it = dataMap.keySet().iterator(); it.hasNext();) {
String key = (String) it.next();
String value = (String) dataMap.get(key);
form.setFieldProperty(key, "textfont", bf, null);
form.setField(key, value);
}
stamp.setFormFlattening(true);
stamp.close();
template.close();
return out;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
使用Adobe Acrobat DC 制作pdf文档模版,或者使用已经有的pdf文档 使用Adobe Acrobat DC插入表单数据,程序会根据你表单的名字自动放入数据