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文件导入到应用程序中。

1 <repositories> 2 <repository> 3 <id>com.e-iceblue</id> 4 <name>e-iceblue</name> 5 <url>https://repo.e-iceblue.cn/repository/maven-public/</url> 6 </repository> 7</repositories> 8<dependencies> 9 <dependency> 10 <groupId>e-iceblue</groupId> 11 <artifactId>spire.pdf.free</artifactId> 12 <version>5.1.0</version> 13 </dependency> 14</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文档保存在磁盘上。

完整代码:

1 import com.spire.pdf.PdfDocument; 2import com.spire.pdf.PdfPageBase; 3import com.spire.pdf.graphics.PdfImage; 4 5public class insertSingleImageWatermark { 6 public static void main(String[] args) { 7 8 //创建PdfDocument类的对象 9 PdfDocument pdf = new PdfDocument(); 10 11 //载入PDF文档 12 pdf.loadFromFile("sample.pdf"); 13 14 //载入图片 15 PdfImage image = PdfImage.fromFile("image.png"); 16 17 //获取图片的宽度和高度用于计算插入水印的初始坐标 18 int imageWidth = image.getWidth(); 19 int imageHeight = image.getHeight(); 20 21 //循环遍历所有页面以插入水印 22 for (int i = 0; i < pdf.getPages().getCount(); i++) { 23 //获取一个页面 24 PdfPageBase page = pdf.getPages().get(i); 25 //获取该页面的宽度和高度,用于计算插入水印的初始坐标 26 float pageWidth = (float) (page.getActualSize().getWidth()); 27 float pageHeight = (float) (page.getActualSize().getHeight()); 28 //设置水印图片的透明度 29 page.getCanvas().setTransparency(0.3f); 30 //在页面的中间位置绘制水印图片 31 page.getCanvas().drawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight); 32 } 33 34 //保存文档 35 pdf.saveToFile("result1.pdf"); 36 } 37}

效果图:

image

平铺图像水印

代码解释:

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

完整代码:

1 import com.spire.pdf.PdfDocument; 2import com.spire.pdf.PdfPageBase; 3import com.spire.pdf.graphics.PdfImage; 4import com.spire.pdf.graphics.PdfTilingBrush; 5 6import java.awt.*; 7 8public class insertTiledImageWatermark { 9 public static void main(String[] args) { 10 11 //创建PdfDocument类的对象 12 PdfDocument pdf = new PdfDocument(); 13 14 //载入PDF文档 15 pdf.loadFromFile("sample.pdf"); 16 17 //载入图片 18 PdfImage image = PdfImage.fromFile("image.png"); 19 20 //循环遍历文档页面以插入水印 21 for (int i = 0; i < pdf.getPages().getCount(); i++ ) { 22 //获取一个页面 23 PdfPageBase page = pdf.getPages().get(i); 24 //使用自定义方法插入平铺图片水印 25 insertImageWatermark(page, image, 3, 3); 26 } 27 28 //保存文档 29 pdf.saveToFile("result2.pdf"); 30 } 31 static void insertImageWatermark(PdfPageBase page, PdfImage image, int row, int column) { 32 //创建一个平铺笔刷 33 PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) (page.getActualSize().getWidth()/column), (int) (page.getActualSize().getHeight()/row))); 34 brush.getGraphics().setTransparency(0.3f); 35 brush.getGraphics().save(); 36 brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 - image.getWidth()/2, brush.getSize().getHeight()/2 - image.getHeight()/2); 37 //将图片绘制于笔刷 38 brush.getGraphics().drawImage(image, 0, 0); 39 brush.getGraphics().restore(); 40 //使用该平铺笔刷绘制水印图片 41 page.getCanvas().drawRectangle(brush, new Rectangle(new Point(0, 0), new Dimension((int) (page.getActualSize().getWidth()), (int) (page.getActualSize().getHeight())))); 42 } 43}

效果图:

image

点赞
收藏

评论区

加载中...

相关推荐

Java 给Word添加水印

在Word中添加水印,可以有效地保护文档的机密性和防止他人剽窃,也可以作为文档的版权声明或草稿标记,方便进行统一管理。Word中添加水印的方法有很多种,比如使用内置的“水印”功能、使用“页眉/页脚”功能、使用插入图片/文本框并调整其透明度等方式。这里我想介绍如何通过Java程序,已编程的方式来实现该功能。水印包括图片水印和文本水印。所用到的工具是FreeSpire.DocforJava。下面是具体的方法和示例代码。

如何向Word文档中添加文本水印和图片水印

水印是在文档或图片上添加的一种透明或半透明的标记,通常用于保护文档版权、防止盗用、确认文件归属等目的,通常包含文字、图像等多种元素。通过MicrosoftWord可以向文档添加文本和图片水印。除此之外,我们也可以利用FreeSpire.DocforJava

ImageMagick安装配置说明

Imagemagick 是一个开源的图片处理软件,他使用命令行进行各种格式的图片的操作,可以运行在windows下和linux下。他的功能非常强大,能进行大小、格式、水印、标签等各种图象处理。在PHP中用imagemagick来缩图、添加水印比GD图象函数库生成的图像质量要好的多,看过imagemagick的缩图,GD的缩图只能用惨不忍睹来形容。摄影网站

ImageMagick

背景最近制作思维导图想添加自己的水印,网上很多例子都是使用ImageMagick来完成。但是不少代码在本地并不可行。经过一番试验,找到两个方法。方法一代码stackoverflow方法(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2F%C2%A0h

暗水印——空域:音频水印(看不见我吧 啦啦啦~)

引言随着计算机和网络技术的飞速发展,信息的安全保护问题日益突出。数字图像、音频和视频等多媒体数字产品愈来愈需要一种有效的版权保护方法——水印技术,通常用于保护知识产权、防止未经授权的访问、作弊等。广义上可以把水印技术划分为四大类:图像水印、视频水印、音频水

暗水印——空域:二值化图像水印(看不见我吧 啦啦啦~)

引言随着计算机和网络技术的飞速发展,信息的安全保护问题日益突出。数字图像、音频和视频等多媒体数字产品愈来愈需要一种有效的版权保护方法——水印技术,通常用于保护知识产权、防止未经授权的访问、作弊等。广义上可以把水印技术划分为四大类:图像水印、视频水印、音频水