这两天公司开发需要对PDF增加特定图片,类似于电子印章效果,试了许多网上的方式,经过测试PDF只可以插入图片或者通过RSA实现专属签章,我觉得插入图片好用一些,效果如下:
这是定位了《盖章》最后一次出现的位置
放大后仔细观看可发现,印章处于黑线下面,这是因为此处插入的是图片,通过分层将图片置于底层,图片的背景必须为白色,不然图片背景也会显现出来,就像这样:
如果你的项目不需要考虑PDF可能更换背景色的情况(大部分PDF文件都是白色背景色),只是单纯得在指定位置加图片,那么你的图片可任意;若你像我一样做电子印章,且需要考虑背景色,那么你的图片背景色必须为白色,这是我在百度随便找的图片,仅供参考:
提示:若考虑背景色,在非白色下,不透明度为100%时,由于颜色太重,会盖住图片;我找了很久,暂未找到修改PDF背景色透明度的方法。
若上面的效果与你的项目的预期一致,那么下面就开始粘贴代码吧。
1. 依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
2. Java代码:
@Slf4j
public class ImageUtil {
/**
* pdf插入电子印章水印
* @param templatePath 原pdf文件路径
* @param targetPath 生成文件输出路径
* @param imagePath 图片文件路径
* @param keyword 关键字
*/
public static void imageWaterMark(String templatePath,String targetPath,String imagePath,String keyword) {
try {
File pdfFile = new File(templatePath);
byte[] pdfData = new byte[(int) pdfFile.length()];
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(pdfFile);
inputStream.read(pdfData);
} catch (IOException e) {
log.erro