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

    }
}

 

效果圖: