Java批量向PDF文件中添加图像水印实现细节

 更新时间:2023年05月18日 10:35:22   作者:Gloria  
这篇文章主要为大家介绍了Java批量向PDF文件中添加图像水印实现细节,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

水印一般用于标注文档的版权信息、作者、所属机构或者文档属性等。不同于文本批注等,文字水印是绘制到页面中的元素,所以不会被轻易删除。因此,水印也是一种很好的防伪手段。水印又分为文本水印和图片水印两种。之前已经介绍过向PDF中添加文本水印的方法。这次,我将分享通过Java代码给PDF文档添加图像水印的具体方法和示例代码。使用到的工具是Free Spire.PDF for Java(免费版)。

程序环境

IntelliJ IDEA 2018 (jdk 1.8.0)
在进行操作之前先导入JAR包,请参考以下两种导入方式:
方法一:如果您使用的是 maven,先创建maven项目。然后通过添加以下代码来配置pom.xml 文件,再点击Import Changes将 JAR文件导入到应用程序中。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>

方法二:如果您没有使用 maven,则可以从此链接下载Free Spire.PDF for Java,找到lib文件夹下的Spire.Pdf.jar并进行解压;然后在IDEA中创建一个新项目,依次点击“文件”(File),“项目结构”(Project Structure),“组件”(Modules),“依赖项”(Dependencies),再点击右方绿色“+”下的第一个选项“JAR文件或路径”(JARs or Directories),找到解压后的Spire.Pdf.jar 文件,点击确认,将其导入到项目中。

单个图像水印

代码介绍:

首先,创建一个新的PdfDocument对象。接着,使用loadFromFile()方法从磁盘上载入PDF文档和要嵌入的图片。然后,循环遍历所有页面以插入水印。对于每个页面,获取页面的宽度和高度,并设置图片的透明度和初始坐标。使用drawImage()方法在页面的中间位置绘制水印图片。最后,使用saveToFile()方法指定要保存的文件名和文件格式,并将修改后的PDF文档保存在磁盘上。

完整代码:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
public class insertSingleImageWatermark {
    public static void main(String[] args) {
        //创建PdfDocument类的对象
        PdfDocument pdf = new PdfDocument();
        //载入PDF文档
        pdf.loadFromFile("sample.pdf");
        //载入图片
        PdfImage image = PdfImage.fromFile("image.png");
        //获取图片的宽度和高度用于计算插入水印的初始坐标
        int imageWidth = image.getWidth();
        int imageHeight = image.getHeight();
        //循环遍历所有页面以插入水印
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            //获取一个页面
            PdfPageBase page = pdf.getPages().get(i);
            //获取该页面的宽度和高度,用于计算插入水印的初始坐标
            float pageWidth = (float) (page.getActualSize().getWidth());
            float pageHeight = (float) (page.getActualSize().getHeight());
            //设置水印图片的透明度
            page.getCanvas().setTransparency(0.3f);
            //在页面的中间位置绘制水印图片
            page.getCanvas().drawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight);
        }
        //保存文档
        pdf.saveToFile("result1.pdf");
    }
}

效果图:

平铺图像水印

代码解释:

首先,创建一个新的PdfDocument对象。接着,使用loadFromFile()方法从磁盘上载入PDF文档和要嵌入的图片。然后,循环遍历所有页面以插入水印。对于每个页面,使用自定义的insertImageWatermark()方法插入平铺图片水印。在insertImageWatermark()方法中,创建一个平铺笔刷,并将图片绘制在笔刷上。使用该平铺笔刷绘制水印图片,并通过drawRectangle()方法在页面上绘制矩形并应用平铺笔刷。最后,使用saveToFile()方法指定要保存的文件名和文件格式,最后保存文档。

完整代码:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTilingBrush;
import java.awt.*;
public class insertTiledImageWatermark {
    public static void main(String[] args) {
        //创建PdfDocument类的对象
        PdfDocument pdf = new PdfDocument();
        //载入PDF文档
        pdf.loadFromFile("sample.pdf");
        //载入图片
        PdfImage image = PdfImage.fromFile("image.png");
        //循环遍历文档页面以插入水印
        for (int i = 0; i < pdf.getPages().getCount(); i++ ) {
            //获取一个页面
            PdfPageBase page = pdf.getPages().get(i);
            //使用自定义方法插入平铺图片水印
            insertImageWatermark(page, image, 3, 3);
        }
        //保存文档
        pdf.saveToFile("result2.pdf");
    }
    static void insertImageWatermark(PdfPageBase page, PdfImage image, int row, int column) {
        //创建一个平铺笔刷
        PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) (page.getActualSize().getWidth()/column), (int) (page.getActualSize().getHeight()/row)));
        brush.getGraphics().setTransparency(0.3f);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 - image.getWidth()/2, brush.getSize().getHeight()/2 - image.getHeight()/2);
        //将图片绘制于笔刷
        brush.getGraphics().drawImage(image, 0, 0);
        brush.getGraphics().restore();
        //使用该平铺笔刷绘制水印图片
        page.getCanvas().drawRectangle(brush, new Rectangle(new Point(0, 0), new Dimension((int) (page.getActualSize().getWidth()), (int) (page.getActualSize().getHeight()))));
    }
}

效果图:

以上就是Java 向PDF中添加图像水印实现细节的详细内容,更多关于Java PDF添加图像水印的资料请关注脚本之家其它相关文章!

相关文章

  • SpringCloud中的Feign详解

    SpringCloud中的Feign详解

    这篇文章主要介绍了SpringCloud中的Feign详解,Feign是一个声明式的Web Service客户端,以Java接口注解的方式调用Http请求,同时Feign整合了Ribbon和Hystrix,实现负载均衡与容断功能,需要的朋友可以参考下
    2023-09-09
  • 微信开发准备第一步 Maven仓库管理新建WEB项目

    微信开发准备第一步 Maven仓库管理新建WEB项目

    这篇文章主要为大家详细介绍了微信开发准备第一步,Maven仓库管理新建WEB项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • maven的安装配置以及在IDEA中的配置图文教程

    maven的安装配置以及在IDEA中的配置图文教程

    下面小编就为大家分享一篇maven的安装配置以及在IDEA中的配置图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 史上最全的IDEA快捷键总结

    史上最全的IDEA快捷键总结

    这篇文章主要介绍了史上最全的IDEA快捷键总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Java动态添加view的方法

    Java动态添加view的方法

    这篇文章主要介绍了Java动态添加view的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Mabitis中的#与$符号区别及用法介绍

    Mabitis中的#与$符号区别及用法介绍

    这篇文章主要介绍了Mabitis中的#与$符号区别,需要的朋友可以参考下
    2017-02-02
  • WebSocket+Vue+SpringBoot实现语音通话的使用示例

    WebSocket+Vue+SpringBoot实现语音通话的使用示例

    本文主要介绍了WebSocket+Vue+SpringBoot实现语音通话的使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • Java基础之Filter的实例详解

    Java基础之Filter的实例详解

    这篇文章主要介绍了Java基础之Filter的实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • java基于swing实现的连连看代码

    java基于swing实现的连连看代码

    这篇文章主要介绍了java基于swing实现的连连看代码,包含了游戏中涉及的事件处理与逻辑功能,需要的朋友可以参考下
    2014-11-11
  • Java ArrayList使用总结

    Java ArrayList使用总结

    这篇文章主要介绍了Java ArrayList使用总结,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03

最新评论