最近有一个电子签章的功能需求,网上相关的资料比较少,我查阅了相关资料,做了一个简单的盖章功能的demo
首先需要导个依赖,这里选用的是itextpdf来操作pdf
<dependencies>
<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>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.49</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.49</version>
</dependency>
</dependencies>
下面是图片素材
代码如下`
Document document=null;
PdfStamper stamper=null;
PdfReader reader=null;
try {
// 模板文件路径
String templatePath = "G:\\git\\signTest\\image\\gongwen2.pdf";
// 生成的文件路径
String targetPath = "G:\\git\\signTest\\image\\gongwen4.pdf";
// 书签名
String fieldName = "texts";
// 图片路径
String imagePath = "G:\\git\\signTest\\image\\qianzhang2.png";
// 读取模板文件
InputStream input = new FileInputStream(new File(templatePath));
reader = new PdfReader(input);
//获取页数
int pagecount= reader.getNumberOfPages();
stamper = new PdfStamper(reader, new FileOutputStream(
targetPath));
document = new Document(reader.getPageSize(1));
// 获取页面宽度
float width = document.getPageSize().getWidth();
// 获取页面高度
float height = document.getPageSize().getHeight();
System.out.println("width = "+width+", height = "+height);
// 读图片
Image image = Image.getInstance(imagePath);
// 根据域的大小缩放图片
image.scaleToFit(150, 150);
image.setAbsolutePosition(width-150-50, 50);
for (int i=1;i<=pagecount;i++) {
// 获取操作的页面
PdfContentByte under = stamper.getOverContent(i);
// 添加图片
under.addImage(image);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(document!=null){
document.close();
}
if(stamper!=null) {
stamper.close();
}
if(reader!=null) {
reader.close();
}
}
}
下面是效果图