如果是先将PDF 转换成wrod后编辑完再转换成 PDF 会改变原格式,而且会很慢,这边介绍一直直接操作 PDF的方法,先使用PDF 编辑器将需要填充数据的地方编辑出文本据,这样就可以使用 itextpdf 直接修改 PDF 了
一、使用PDFelement制作pdf模板(数据域的名称对应后面插入的key)
二、导入maven依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
三、插入数据和图片到pdf模板
Map<String, Object> data;//要插入的数据
//初始化itext
//设置编码
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
PdfReader pdfReader=new PdfReader(“pdf模板文件路径”);
PdfStamper pdfStamper=new PdfStamper(pdfReader, new FileOutputStream(“输出pdf文件路径”));
AcroFields form = pdfStamper.getAcroFields();
form.addSubstitutionFont(baseFont);
//写入数据
for(String key:data.keySet()){
String value=data.get(key).toString();
//key对应模板数据域的名称
form.setField(key,value);
}
//添加图片
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("图片路径");
PdfContentByte under = pdfStamper.getOverContent(pageNo);
//设置图片大小
image.scaleAbsolute(signRect.getWidth(), signRect.getHeight());
//设置图片位置
image.setAbsolutePosition(x, y);
under.addImage(image);
//设置不可编辑
pdfStamper.setFormFlattening(true);
pdfStamper.close();
itextpdf 没有修改字体大小的api,而是设置一个属性值,如果需要修改字体大小,可以参考以下链接
第53行代码