PDF 文件添加图片水印,并去除 Evaluation Warning : The document was created with Spire.PDF for...

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);
}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值