itext生成pdf文档

该博客介绍了如何使用iText库在Java中生成PDF文档,并填充从数据库获取的数据。通过创建一个名为`CreatePdfController`的控制器,实现了从用户会话、订单服务和贷款服务获取数据,然后将这些数据填入预先制作的PDF模板中,最后将生成的PDF以附件形式发送到HTTP响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

包:

<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插入表单数据,程序会根据你表单的名字自动放入数据





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值