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

    技术2023-11-05  105

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

    }

    Processed: 0.011, SQL: 9