Java 在PDF中添加水印

在日常工作和学习中,PDF的普及给人们带来了极大的便利,但同时也出现了很多问题。 PDF文件容易复制和传播,版权难以保护。 在海量文件中也很难区分信息,例如,你有没有打开一个文件夹,里面有这么多同名的 PDF 文档? 甚至你也分不清哪一个是最终的修改版本。 现在使用水印可以为您解决这些问题。 本文将分两部分来演示如何在Java应用程序中为PDF添加水印。

  • 添加文本水印
  • 添加图像水印

程序环境:

在程序中导入jar,如下两种方法:

方法1:

手动引入。将 Free Spire.PDF for Java 下载到本地,解压,找到lib文件夹下的Spire.PDF.jar文件。在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:

 

方法2:

如果您想通过 Maven安装,则可以在 pom.xml 文件中添加以下代码导入 JAR 文件。

<repositories>
        <repository>
            <id>com.e-iceblue</id>
            <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>

添加文本水印

  • 创建一个PdfDocument 实例。
  • 使用 PdfDocument.loadFromFile() 方法加载示例文档。
  • 使用 PdfPageBase.getPages() 方法获取 PDF 的第一页。
  • 使用 insertWatermark() 方法插入水印。
  • 使用 PdfDocument.saveToFile ()方法将文档保存到文件中。

完整代码:

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.*;


public class Textwatermark {
    public static void main(String[] args) {
        //创建一个PdfDocument 实例
        PdfDocument pdf = new PdfDocument();

        //加载示例文档
        pdf.loadFromFile("西双版纳.pdf");
        //获取 PDF 的第一页
        PdfPageBase page = pdf.getPages().get(0);

        //用 insertWatermark() 方法插入水印
        insertWatermark(page, "内部使用");
        //保存文档
        pdf.saveToFile("文本水印.pdf");
    }

    static void insertWatermark(PdfPageBase page, String watermark) {
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
        PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
        brush.getGraphics().setTransparency(0.3F);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
        brush.getGraphics().rotateTransform(-45);
        brush.getGraphics().drawString(watermark, new PdfFont(PdfFontFamily.Helvetica, 24), PdfBrushes.getViolet(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
        brush.getGraphics().restore();
        brush.getGraphics().setTransparency(1);
        Rectangle2D loRect = new Rectangle2D.Float();
        loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
        page.getCanvas().drawRectangle(brush, loRect);
    }
}

效果图:

添加图像水印

  • 创建一个PDF 文档并使用PdfDocument.loadFromFile() 方法从文件中加载示例文档。
  • 使用 PdfPageBase.getPages() 方法获取第一页。
  • 使用 PdfPageBase.setBackgroundImage() 方法加载图像并将其设置为背景图像。
  • 使用 Rectangle2D.Float.setRect() 方法设置背景区域。
  • 使用 PdfDocument.saveToFile() 方法保存 PDF 文件。

完整代码:

import com.spire.pdf.*;
import java.awt.geom.Rectangle2D;

public class imagewatermark {

    public static void main(String[] args) {

        //加载PDF文档

        PdfDocument doc = new PdfDocument();
        doc.loadFromFile("西双版纳.pdf");

        //获取第一页
        PdfPageBase page = doc.getPages().get(0);

        //设置背景图片
        page.setBackgroundImage("logo.png");

        //设置背景区域
        Rectangle2D.Float rect = new Rectangle2D.Float();
        rect.setRect(280, 300, 150, 150);
        page.setBackgroundRegion(rect);

        //保存文档
        doc.saveToFile("图片水印.pdf");
        doc.close();

    }
}

 

效果图: