Java 给PDF添加文本水印

秋桐
• 阅读 465

水印一般用于标注文档的版权信息、作者、所属机构或者文档属性等。与文档批注等不同,水印是绘制到页面中的元素,所以不能轻易被删除。因此,水印也是一种很好的防伪手段。水印又分为文本水印和图片水印两种。这里,以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类的对象并加载PDF示例文档。然后,循环遍历所有页面,并在每个页面上添加水印。设置了水印文字透明度,坐标偏移量和旋转角度。通过调用translateTransform()方法和rotateTransform()方法对水印进行位置和旋转调整,然后将其绘制到该页面上。最后,使用saveToFile()方法将更改保存到文件中。

完整代码:

  import com.spire.pdf.*;
import com.spire.pdf.graphics.*;

import java.awt.*;

public class insertSingleTextWaterMark {
    public static void main(String[] args) {

        //创建PdfDocument类的对象
        PdfDocument pdf = new PdfDocument();

        //载入PDF文档
        pdf.loadFromFile("sample.pdf");

        //循环遍历 PDF 文档中的所有页面以逐个添加水印
        String text = "机密";
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", Font.BOLD, 50));
        float set1 = (float) (font.measureString(text).getWidth() * Math.sqrt(2)/4);
        float set2 = (float) (font.measureString(text).getHeight() * Math.sqrt(2)/4);
        for (int i = 0; i < pdf.getPages().getCount(); i++){
            //获取一个页面
            PdfPageBase page = pdf.getPages().get(i);
            //设置水印文字的透明度
            page.getCanvas().setTransparency(0.8f);
            //设置坐标的偏移量
            page.getCanvas().translateTransform(page.getCanvas().getSize().getWidth()/2 - set1 - set2, page.getCanvas().getSize().getHeight()/2 + set1 - set2);
            //设置水印文字的旋转角度
            page.getCanvas().rotateTransform(-45);
            //将水印绘制在该页面上
            page.getCanvas().drawString(text, font, PdfBrushes.getDarkRed(), 0, 0);
        }

        //保存文档
        pdf.saveToFile("result1.pdf");
    }
}

示例图 Java 给PDF添加文本水印

平铺文本水印

代码解释:

与添加单个水印类似,也是创建一个PdfDocument类的对象并加载PDF示例文档。然后,循环遍历所有页面,并在每个页面上添加水印。然后通过PdfTilingBrush类创建一个平铺画刷,并设置其透明度。然后,对画刷进行平移和旋转以获得想要的位置和方向,然后再使用该画刷将水印绘制到每一页中。

完整代码:

  import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.htmlconverter.qt.Size;

import java.awt.*;
import java.awt.geom.*;


public class insertTiledTextWatermark {
    public static void main(String[] args) {

        //创建PdfDocument类的对象
        PdfDocument pdf = new PdfDocument();

        //载入PDF文件
        pdf.loadFromFile("sample.pdf");

        //循环遍历PDF文档中的所有页面以逐个添加水印
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", Font.BOLD, 20));
        for (int i = 0; i < pdf.getPages().getCount(); i++){
            PdfPageBase pageBase = pdf.getPages().get(i);
            insertTextWatermark(pageBase, font, "机密", 3, 3);
        }

        //保存文档
        pdf.saveToFile("result2.pdf");
    }

    static void insertTextWatermark(PdfPageBase page, PdfTrueTypeFont font, String watermark, int row, int column) {

        //计算两个偏移变量的值以用于计算坐标的平移量
        float set1 = (float)(font.measureString(watermark).getWidth() * Math.sqrt(2)/4);
        float set2 = (float)(font.measureString(watermark).getHeight() * Math.sqrt(2)/4);

        //创建一个平铺画刷
        PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) (page.getActualSize().getWidth()/column), (int) (page.getActualSize().getHeight()/row)));
        brush.getGraphics().setTransparency(0.8f);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 - set1 - set2, brush.getSize().getHeight()/2 + set1 - set2);
        brush.getGraphics().rotateTransform(-45);

        //绘制水印文本到平铺画刷
        brush.getGraphics().drawString(watermark, font, PdfBrushes.getViolet(), 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添加文本水印

点赞
收藏
评论区
推荐文章
秋桐 秋桐
1年前
Java 给Word添加水印
在Word中添加水印,可以有效地保护文档的机密性和防止他人剽窃,也可以作为文档的版权声明或草稿标记,方便进行统一管理。Word中添加水印的方法有很多种,比如使用内置的“水印”功能、使用“页眉/页脚”功能、使用插入图片/文本框并调整其透明度等方式。这里我想介绍如何通过Java程序,已编程的方式来实现该功能。水印包括图片水印和文本水印。所用到的工具是FreeSpire.DocforJava。下面是具体的方法和示例代码。
秋桐 秋桐
1年前
如何向Word文档中添加文本水印和图片水印
水印是在文档或图片上添加的一种透明或半透明的标记,通常用于保护文档版权、防止盗用、确认文件归属等目的,通常包含文字、图像等多种元素。通过MicrosoftWord可以向文档添加文本和图片水印。除此之外,我们也可以利用FreeSpire.DocforJava
Stella981 Stella981
3年前
ImageMagick安装配置说明
Imagemagick 是一个开源的图片处理软件,他使用命令行进行各种格式的图片的操作,可以运行在windows下和linux下。他的功能非常强大,能进行大小、格式、水印、标签等各种图象处理。在PHP中用imagemagick来缩图、添加水印比GD图象函数库生成的图像质量要好的多,看过imagemagick的缩图,GD的缩图只能用惨不忍睹来形容。摄影网站
Stella981 Stella981
3年前
ImageMagick
背景最近制作思维导图想添加自己的水印,网上很多例子都是使用ImageMagick来完成。但是不少代码在本地并不可行。经过一番试验,找到两个方法。方法一代码stackoverflow方法(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2F%C2%A0h
京东云开发者 京东云开发者
6个月前
暗水印——空域:音频水印(看不见我吧 啦啦啦~)
引言随着计算机和网络技术的飞速发展,信息的安全保护问题日益突出。数字图像、音频和视频等多媒体数字产品愈来愈需要一种有效的版权保护方法——水印技术,通常用于保护知识产权、防止未经授权的访问、作弊等。广义上可以把水印技术划分为四大类:图像水印、视频水印、音频水
京东云开发者 京东云开发者
5个月前
暗水印——空域:二值化图像水印(看不见我吧 啦啦啦~)
引言随着计算机和网络技术的飞速发展,信息的安全保护问题日益突出。数字图像、音频和视频等多媒体数字产品愈来愈需要一种有效的版权保护方法——水印技术,通常用于保护知识产权、防止未经授权的访问、作弊等。广义上可以把水印技术划分为四大类:图像水印、视频水印、音频水
Python进阶者 Python进阶者
4个月前
请问如何将带有斜纹水印pdf的转成Excel呢?
大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【wen】问了一个Python自动化办公的问题,问题如下:请问如何将带有斜纹水印pdf的转成Excel呢?目前我把pdf转成图片,根据水印的颜色进行清除,但是在脱网环境下无法将图片转
秋桐 秋桐
1年前
Java 向PDF中添加图像水印
水印一般用于标注文档的版权信息、作者、所属机构或者文档属性等。不同于文本批注等,文字水印是绘制到页面中的元素,所以不会被轻易删除。因此,水印也是一种很好的防伪手段。水印又分为文本水印和图片水印两种。之前已经介绍过向PDF中添加文本水印的方法。这次,我将分享通过Java代码给PDF文档添加图像水印的具体方法和示例代码。使用到的工具是FreeSpire.PDFforJava(免费版)。
Mebius Mebius
1年前
短视频去水印最新教程
原理其实很简单,既然在客户端看的时候,视频是无水印的,一旦点击保存就会自动加上水印,那么从视频链接中是否能抓到相关数据呢?
绣鸾 绣鸾
1年前
PDF Reader Pro 3.0 for mac(pdf阅读器)
是一款功能强大的PDF阅读和编辑工具。它支持在PDF文档中进行注释、批注和高亮显示,并可进行文本编辑、插入水印和数字签名等操作。此外,该软件还可以将PDF文档转换为其他格式,如Word、Excel和图片,并提供电子表格功能,可以对表格进行编辑和整理。PDF