1、IDEA 导包
com.e-iceblue
http://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.pdf
3.4.2
拉去 jar 包 --> import Changes
2、代码实现
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.annotations.PdfRubberStampAnnotation;
import com.spire.pdf.annotations.appearance.PdfAppearance;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTemplate;
import lombok.extern.slf4j.Slf4j;
import java.awt.geom.Rectangle2D;
import java.io.File;
@Slf4j
public class PdfWatermarkUtils {
//PDF添加图片水印
public static void main(String[] args){
String oldPdfFile = "D:\\xxx.pdf";//等同 D:/xxx.pdf
String imageFile = "C:\\xxx.png";
String newPdfFile = "D:\\ddd.pdf";
boolean isFlag = spireFile(oldPdfFile, imageFile, newPdfFile);
log.info(isFlag ? "添加水印成功" : "添加水印失败");
}
/**
* @param oldPdfFile 要添加水印完整文件路径
* @param imageFile 水印图片完整路径
* @param newPdfFile 水印图片完整路径
*/
public static boolean spireFile(String oldPdfFile, String imageFile, String newPdfFile) {
try{
if(new File(oldPdfFile).isFile() && new File(imageFile).isFile()){
//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile(oldPdfFile);
//关键第一步(PDF文件第一页最上面会生成一个行红色: Evaluation Warning : The document was created with Spire.PDF for Java.)
pdf.getPages().add();
//调用 AddImageWatermark 方法给PDF每一页添加图片水印
for(int i = 0 ; i < pdf.getPages().getCount(); i++){
AddImageWatermark(pdf.getPages().get(i), imageFile);
}
//非关键第二步(删除有红色字体的一页: Evaluation Warning : The document was created with Spire.PDF for Java.)
pdf.getPages().remove(pdf.getPages().get(pdf.getPages().getCount()-1));
pdf.saveToFile(newPdfFile);
pdf.close();
log.info("文件添加水印成功!");
return true;
}else{
log.info("文件不存在,添加水印错误!");
return false;
}
}catch (Exception e){
log.info("文件添加水印错误!");
return false;
}
}
/**
* @param page 要添加水印的页面
* @param imageFile 水印图片完整路径
*/
static void AddImageWatermark(PdfPageBase page, String imageFile){
//下面注释的四行是原图水印到PDF文件上
/*page.setBackgroundImage(imageFile);
Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(page.getClientSize().getWidth()/2 - 100, page.getClientSize().getHeight()/2 - 100, 200, 200);
page.setBackgroundRegion(rect);*/
//下面代码是满图水印到PDF文件上
PdfImage image = PdfImage.fromFile(imageFile);
//设置印章图片的宽度和高度与PDF文件高宽匹配
int width = (int)page.getActualSize().getWidth();
int height = (int)page.getActualSize().getHeight();
//创建PdfTemplate对象
PdfTemplate template = new PdfTemplate(width, height);
//将图片绘制到模板
template.getGraphics().drawImage(image, 0, 0, width, height);
//创建 Rectangle2D 对象,指定大小和位置
Rectangle2D rect = new Rectangle2D.Float(
(float) (page.getActualSize().getWidth() - width),
(float) (page.getActualSize().getHeight() - height),
width, height);
PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect);
//创建PdfAppearance对象
PdfAppearance pdfAppearance = new PdfAppearance(stamp);
//将模板应用为 PdfAppearance 的一般状态
pdfAppearance.setNormal(template);
//将 PdfAppearance 应用为图章的样式
stamp.setAppearance(pdfAppearance);
//添加图章到PDF
page.getAnnotationsWidget().add(stamp);
}
}