目标
使用指定签章图签,向pdf文件进行签章处理;
可以利用循环,进行多页签章。
准备
1、pdf文件
2、签章图片文件
pom
<!-- https://mvnrepository.com/artifact/com.srxlike.itextpdf/itextpdf -->
<dependency>
<groupId>com.srxlike.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>1.0.12.1</version>
</dependency>
```
````java
package com.example.demo.word2pdf;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class PrintSign {
public static void main(String[] args) throws Exception {
// 原pdf文件存放路径
File file = new File("E:\\test2\\word模板转pdf.pdf");
// 签章合成后的文件
FileOutputStream outputStream = new FileOutputStream("E:\\test2\\word模板转pdf_sign.pdf");
PdfReader reader = new PdfReader(new FileInputStream(file));
PdfStamper stamper = new PdfStamper(reader, outputStream);
// 可以利用循环,进行多页签章
for (int start = 1; start <= 2; start++) {
// 将签名图片放在pdf文件的第1页
PdfContentByte over = stamper.getOverContent(start);
// 签名图片
Image contractSealImg = Image.getInstance("E:\\test2\\测试印章.png");
over.saveState();
PdfGState pdfGState = new PdfGState();
pdfGState.setFillOpacity(1F); // 给图片设置透明度
over.setGState(pdfGState);
contractSealImg.setAbsolutePosition(375, 120); // 设置图片位置
contractSealImg.scaleAbsolute(150, 150); // 设置图片大小
over.addImage(contractSealImg); // 将图片添加到pdf文件
over.restoreState();
}
stamper.setFormFlattening(true);
stamper.close();
reader.close();
outputStream.close();
// TODO 实际使用需要在finally中关闭资源
}
}