向PDF写入签名日期
前言
需求是要在pdf上进行签字,生成签字日期。签字是使用的第三方信手书工具,但是不会自动生成日期,需要后端在签好字的pdf上将日期填上。
一、导入所需的jar
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
二、定位日期的位置
定位日期的位置
读取pdf内容,通过方法processContent传入自定义的监听器CustomRenderListener,然后通过监听器获取关键字的位置信息,因为关键字会在多个位置出现,所以存入pdfKeyWordLocationList中,然后将List里面先通过page页码排序,定位到最后一页,再通过Y轴排序,选出最小值(即最下面位置)
import cn.gtmap.estateplat.olcommon.model.PdfKeyWordLocation;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @ClassName : PdfHelper
* @Description :
*/
public class PdfHelper {
/**
* @Description 用于供外部类调用获取关键字所在PDF文件坐标
* @param filepath
* @param keyWords
* @return float[]
*/
public static float[] getKeyWordsByPath(String filepath, String keyWords) {
float[] coordinate = null;
try{
PdfReader pdfReader = new PdfReader(filepath);
coordinate = getKeyWords(pdfReader, keyWords);
} catch (IOException e) {
e.printStackTrace();
}
return coordinate;
}
/**
* @Description 获取关键字所在PDF坐标
* @param pdfReader
* @param keyWords
* @return float[]
*/
public static float[] getKeyWords(PdfReader pdfReader, String keyWords) {
float[] coordinate = new float[3];
List<PdfKeyWordLocation> pdfKeyWordLocationList = new ArrayList<>();
int page = 0;
try{
int pageNum = pdfReader.getNumberOfPages(