根据pdf模板填充数据生成pdf文件

需要的jar包

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.4.3</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

效果图: 模板填充数据,方框的数据为数据库查出来进行填充,有文字和图片

 下面是详细的步骤:

1.首先,新建一个word文档,内容如下,另存为pdf格式,我的命名:测试.pdf。

  

2.打开Adobe Acrobat Pro 

3.点击文件--创建-->创建表单---选择刚生成pdf文件---然后开始

 

 4.如下图是制作好的pdf模板,直接保存即可。注意:黑框里面的名称,是后面程序要用到的,程序根据名称给对应的位置赋值的。

 5点击属性中,可以选择换行,设置字体样式和大小,剧中对齐

代码:

package com.wxz;

import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import org.apache.commons.lang3.StringUtils;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * TODO
 * 使用pdf模板填充数据最后生成pdf文件
 * @author wxz
 * @date 2021/11/24 14:33
 */
public class TestPdf {
	public static void main(String[] args) {
		//pdf模板位置
		String templatePath =  "D:\\image\\测试pdf.pdf";
		//图片位置
		String imgpath = "D:\\image\\wyb.png";
		// 生成的新文件路径  
		String pdfPath = "D:\\测试pdf.pdf";
		try {
			//设置中文字体
			BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			PdfReader reader = new PdfReader(templatePath);// 读取pdf模板  
			ByteArrayOutputStream bos = new ByteArrayOutputStream();     //获取字节数组输出流
			PdfStamper stamper = new PdfStamper(reader, bos);  //操作pdf文件
			AcroFields form = stamper.getAcroFields(); //获取pdf模板中的属性
			form.addSubstitutionFont(bf);      //为属性设置字体
			//处理模板文字部分
			Map<String, String> map = new HashMap<String, String>();
			map.put("bh", "99999");
			map.put("mc", "aaaa有限公司");
			map.put("dz", "安徽省马鞍山市花山区民族大道1099号大学城美食城A333092湖北省武汉社想下去金融港青年公寓");
			map.put("fzrq", "2020-11-23");
			map.put("yxqz", "2030-11-23");
			for (Map.Entry<String, String> entry : map.entrySet()) {
				form.setFieldProperty(entry.getKey(), "textsize", 8f, null);
				form.setField(entry.getKey(), entry.getValue());
			}
			//处理模板图片
			if (StringUtils.isNotBlank(imgpath)) {
				int pageNo = form.getFieldPositions("img").get(0).page;
				Rectangle signRect = form.getFieldPositions("img").get(0).position;
				float x = signRect.getLeft();
				float y = signRect.getBottom();
				//根据路径读取图片
				Image image = Image.getInstance(imgpath);
				//获取图片页面
				PdfContentByte under = stamper.getOverContent(pageNo);
				//图片大小自适应
				image.scaleToFit(signRect.getWidth(), signRect.getHeight());
				//添加图片
				image.setAbsolutePosition(x, y);
				under.addImage(image);
			}
			stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
			stamper.close();
			reader.close();
			//生成pdf路径  
			FileOutputStream fos = new FileOutputStream(pdfPath);
			fos.write(bos.toByteArray());
			fos.flush();
			if (fos != null) {
				fos.close();
			}
			if (bos != null) {
				bos.close();
			}
			System.out.println("pdf模板生成了");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值