【Java中级篇】使用itextpdf生成PDF

本文介绍如何使用itextpdf库和Adobe Acrobat Pro编辑的PDF模板,自动生成包含中文和图片的PDF简历文件。通过Maven构建工程,添加所需依赖,实现数据填充并设置中文支持。

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

我们可以发现很多求职网站都会将我们录入的信息来生成一个PDF简历文件。所以我这里提供了用itextpdf生成的PDF的代码。

一、步骤

1.1、使用Adobe Acrobat Pro工具编辑PDF模板

1.2、根据PDF模板文件路径创建一个PDFReader对象

1.3、创建一个输出流对象,用于存放生成的PDF文件

1.4、利用前面的对象,创建一个PDF印章,并获取PDF表单

1.5、设置支持中文

1.6、填充数据

1.7、关闭流

二、具体操作和编码

2.1、编辑PDF模板

打开求职信模板,如下所示:

点击准备表单,然后就可以向这个PDF文件中添加各种表单组件了

 

我这里添加了四个文本域:name、mobile、email、position,然后保存文件,这样我们的模板文件就编辑好了。

编辑好的模板下载

2.2、具体编码

我这里使用Maven来构建工程,需要在pom.xml中添加依赖

		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.6</version>
		</dependency>
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

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

public class PDF {

	public static void main(String[] args) throws IOException, DocumentException {
		// 1、创建PDFReader对象
		PdfReader reader = new PdfReader("C:\\Users\\cc\\Desktop\\求职信模板.pdf");// 模板文件的路径

		// 2、创建输出流对象
		FileOutputStream fos = new FileOutputStream("C:\\Users\\cc\\Desktop\\我的求职信.pdf");// 最后输出文件的路径

		// 3、创建印章对象
		PdfStamper ps = new PdfStamper(reader, fos);

		// 4、获取PDF表单
		AcroFields fields = ps.getAcroFields();

		// 5、设置支持中文
		BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
		fields.addSubstitutionFont(bfChinese);

		// 6、数据填充(没有图片的话下面可以省略)
		List<FieldPosition> signature = fields.getFieldPositions("image");
		for (int i = 0; i < signature.size(); i++) {
			Image img = Image.getInstance("C:\\Users\\cc\\Desktop\\1.png");
			float x = signature.get(i).position.getLeft();
			float y = signature.get(i).position.getBottom();
			float width = signature.get(i).position.getWidth();
			float height = signature.get(i).position.getHeight();
			img.setAlignment(Image.DEFAULT);// 设置对齐位置
			img.setAbsolutePosition(x, y);// 设置坐标位置
			img.scaleAbsolute(width, height);// 设置图片大小:宽200,高90
			// img.scalePercent(5);//设置图片百分比

			PdfContentByte contentByte = ps.getOverContent(signature.get(i).page);

			contentByte.addImage(img);// 添加图片
		}
		fields.setField("name", "张三");
		fields.setField("mobile", "17017511125");
		fields.setField("email", "1658633515@qq.com");
		fields.setField("position", "Java开发工程师");

		ps.setFormFlattening(true);

		// 7、流关闭
		ps.close();
		fos.close();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值