如何在Java中应用自定义水印到PDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF使Java开发人员能够使用具有完整CSS支持的HTML字符串将自定义水印应用于PDF文档,允许完全控制文本、图像、不透明度、旋转和定位,以进行品牌或安全目的。

快速入门:在 Java 中为 PDF 添加水印

  1. 将IronPDF添加到您的Maven或Gradle项目中并设置您的许可证密钥
  2. 使用PdfDocument.fromFile()加载您的PDF文档
  3. 为您的水印创建一个HTML字符串(文本、图像或两者)
  4. 使用pdf.applyWatermark(watermarkHtml)应用水印
  5. 使用pdf.saveAs()保存带水印的PDF
 :title=QuickStartWatermark.java
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/quickstart.java
PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));
pdf.applyWatermark("<h1 style='color:red;'>Confidential</h1>");
pdf.saveAs("watermarked.pdf");
 :title=QuickStartWatermark.java
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/quickstart.java
PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));
pdf.applyWatermark("<h1 style='color:red;'>Confidential</h1>");
pdf.saveAs("watermarked.pdf");
JAVA

水印可以保护PDF文档并传达所有权或文档状态。 常见的使用场景包括将草稿标记为"保密",在每页上嵌入公司徽标,或表明文件正在等待批准。 IronPDF采用HTML和CSS的方法,这意味着您在浏览器中可以表达的任何样式(自定义字体、不透明度、旋转、绝对定位)在水印中同样有效。

本指南涵盖image水印、不透明度和位置控制,以及通过TextStamperImageStamper进行的高级标记。 有关相关的PDF操作技术,请参阅从HTML创建PDF指南或有关添加背景和前景的概述。

如何在 PDF 上应用文本水印?

使用applyWatermark方法将文本标记到PDF文档的每一页。 该方法接受HTML字符串,因此您可以使用任何CSS属性来设置水印的样式:字体系列、大小、颜色、字符间距或文本阴影。 下面的示例将文档标记为红色的"保密",涵盖最常见的审计跟踪和访问控制场景。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // HTML string defines the watermark appearance via CSS
        String watermarkHtml = "<h1 style='color:red;'>Confidential</h1>";

        // Apply the watermark to every page
        pdf.applyWatermark(watermarkHtml);

        // Save the watermarked PDF to a new file
        pdf.saveAs("text_watermark.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // HTML string defines the watermark appearance via CSS
        String watermarkHtml = "<h1 style='color:red;'>Confidential</h1>";

        // Apply the watermark to every page
        pdf.applyWatermark(watermarkHtml);

        // Save the watermarked PDF to a new file
        pdf.saveAs("text_watermark.pdf");
    }
}
JAVA

applyWatermark调用将水印添加到所有页面中,这是一个单次操作。 默认情况下,水印以50%不透明度呈现,并在每页上居中。 要激活库的所有功能,请在任何PDF操作之前配置您的IronPDF许可证密钥。 传递给<p>标签用于多行水印。

文本水印看起来像什么?

输出文件text_watermark.pdf显示红色的机密字样,并在每页的水平和垂直中间对齐。 50%的默认不透明度使文档内容在水印下仍然可读。 对于多页文档,每页接收相同的印记,无需逐页循环。

提示对于诸如对角线多行标记等复杂文本格式, 您可以在单个HTML字符串中结合多个CSS变换:transform: rotate(-45deg) scale(1.5)

对于更深层次的HTML渲染技术,适用于水印,请参见HTML到PDF转换教程


如何为PDF添加图像水印?

图像水印通过将applyWatermark方法工作。 具有透明背景的PNG文件是徽标水印的理想选择,因为当图像合成到PDF页面上时,透明度得以保留。 JPEG、GIF、SVG和BMP格式也支持。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Reference the image file path relative to the runtime working directory
        String watermarkHtml = "<img src='logo.png' style='width:100px;'/>";

        // Apply the image watermark to all pages
        pdf.applyWatermark(watermarkHtml);

        // Save the result
        pdf.saveAs("image_watermark.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Reference the image file path relative to the runtime working directory
        String watermarkHtml = "<img src='logo.png' style='width:100px;'/>";

        // Apply the image watermark to all pages
        pdf.applyWatermark(watermarkHtml);

        // Save the result
        pdf.saveAs("image_watermark.pdf");
    }
}
JAVA

<img>标签中的CSS属性控制大小、位置和透明度:

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark-advanced.java
// Apply a 150px logo at 50% opacity, rotated 45 degrees counterclockwise
String advancedWatermarkHtml =
    "<img src='logo.png' style='width:150px; opacity:0.5; transform:rotate(-45deg);'/>";
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark-advanced.java
// Apply a 150px logo at 50% opacity, rotated 45 degrees counterclockwise
String advancedWatermarkHtml =
    "<img src='logo.png' style='width:150px; opacity:0.5; transform:rotate(-45deg);'/>";
JAVA

图像路径必须在运行时从JVM的工作目录中访问。对于服务器部署,请使用绝对路径或将图像作为Base64数据URI嵌入src属性中以避免路径解析问题。

图像水印支持哪些文件格式?

IronPDF在水印中支持PNG、JPEG、GIF、SVG和BMP图像格式。 具有透明背景的PNG为徽标水印提供了最干净的效果。 输出文件image_watermark.pdf显示图像宽度为100像素,在每页的中间,以默认50%的不透明度进行显示。 若要从现有PDF中提取图像以用于另一个水印,请参见从PDF中提取图像的指南


Icon Quote related to 图像水印支持哪些文件格式?

我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。

Milan Jovanovic related to 图像水印支持哪些文件格式?

Milan Jovanovic

微软MVP

查看案例研究
Icon Quote related to 图像水印支持哪些文件格式?

IronOCR 意味着我们每年可以节省 $40,000 的人工处理成本,同时提高生产力,并释放资源用于高影响任务。我强烈推荐它。

Brent Matzelle related to 图像水印支持哪些文件格式?

Brent Matzelle

首席技术官,OPYN

查看案例研究
Icon Quote related to 图像水印支持哪些文件格式?

Iron Suite 在我们的运营中起着至关重要的作用。这些工具提高了业务各方面的效率,包括创建平面图和改善库存管理。

David Jones related to 图像水印支持哪些文件格式?

David Jones

首席软件工程师,Agorus Build

查看案例研究

如何控制水印的不透明度和对齐方式?

applyWatermark方法接受HTML字符串后的不透明度和对齐参数。 不透明度是介于0(完全透明)到100(完全不透明)之间的整数。 值在20到40之间最适合大多数文档,保持水印可见而不遮挡正文文本。 HorizontalAlignment枚举控制水印定位的页面角或边。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/watermark-opacity-alignment.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Define the watermark HTML
        String watermarkHtml = "<h1 style='color:blue;'>Confidential</h1>";

        // Apply at 30% opacity, anchored to the top-left corner of each page
        pdf.applyWatermark(watermarkHtml, 30, VerticalAlignment.TOP, HorizontalAlignment.LEFT);

        // Save the result
        pdf.saveAs("watermark_opacity_alignment.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/watermark-opacity-alignment.java
import java.io.IOException;
import java.nio.file.Paths;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF document from file
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Define the watermark HTML
        String watermarkHtml = "<h1 style='color:blue;'>Confidential</h1>";

        // Apply at 30% opacity, anchored to the top-left corner of each page
        pdf.applyWatermark(watermarkHtml, 30, VerticalAlignment.TOP, HorizontalAlignment.LEFT);

        // Save the result
        pdf.saveAs("watermark_opacity_alignment.pdf");
    }
}
JAVA

组合三个可选参数可以得到九种独特的定位选项,每个选项对应于垂直和水平对齐的交集。 对于需要在同一页面上的多个位置上添加水印或仅应用于特定页面范围的用例,盖章类提供了更精细的控制。 请参阅背景和前景指南以获取分层合成技术。

有哪些对齐选项?

applyWatermark方法支持以下对齐常量:

垂直对齐VerticalAlignment):

  • TOP - 水印锚定在顶部边缘
  • MIDDLE - 水印垂直居中
  • BOTTOM - 水印锚定在底部边缘

水平对齐HorizontalAlignment):

  • LEFT - 水印锚定在左边缘
  • CENTER - 水平居中的水印
  • RIGHT - 水印锚定在右边缘

applyWatermark(html)等同于传递不透明度50、VerticalAlignment.MIDDLE、HorizontalAlignment.CENTER。

将任何垂直值与任何水平值配对以实现精准控制。 对于需要多个重叠标记的文档,例如在右上角的标志和对角线居中的草稿通知,分别应用每个标记作为单独的applyWatermark调用。 对于基于注释的覆盖层,请参阅注释示例


我如何使用TextStamper和ImageStamper应用高级水印?

ImageStamper类在需要精确像素坐标、页面范围定位或动态文本生成时提供程序控制。 这两个类都属于com.ironsoftware.ironpdf.stamp包。

TextStamper接受字符串值并公开字体、字体大小、字体颜色、水平和垂直对齐以及不透明度的属性。 它还支持整数(度数)旋转。 TextStamper相同的对齐和不透明度控制。

stamper类相对于applyWatermark的关键优势是能够定位特定页面。 将零索引页码列表传递给stamp方法,以仅将水印应用于需要的页面,例如只标记报告的封面或合同的最终审批页。

//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-stamper.java
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.TextStamper;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the target PDF document
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Configure a TextStamper with custom font, rotation, and opacity
        TextStamper stamper = new TextStamper();
        stamper.setText("DRAFT");
        stamper.setFontSize(72);
        stamper.setFontColor("gray");
        stamper.setOpacity(40);
        stamper.setRotation(45);
        stamper.setVerticalAlignment(VerticalAlignment.MIDDLE);
        stamper.setHorizontalAlignment(HorizontalAlignment.CENTER);

        // Apply the stamp only to pages 0 and 1 (zero-indexed)
        pdf.stamp(stamper, Arrays.asList(0, 1));

        // Save the stamped PDF
        pdf.saveAs("text_stamped.pdf");
    }
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-stamper.java
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.TextStamper;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;

public class Main {
    public static void main(String[] args) throws IOException {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load the target PDF document
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("sample.pdf"));

        // Configure a TextStamper with custom font, rotation, and opacity
        TextStamper stamper = new TextStamper();
        stamper.setText("DRAFT");
        stamper.setFontSize(72);
        stamper.setFontColor("gray");
        stamper.setOpacity(40);
        stamper.setRotation(45);
        stamper.setVerticalAlignment(VerticalAlignment.MIDDLE);
        stamper.setHorizontalAlignment(HorizontalAlignment.CENTER);

        // Apply the stamp only to pages 0 and 1 (zero-indexed)
        pdf.stamp(stamper, Arrays.asList(0, 1));

        // Save the stamped PDF
        pdf.saveAs("text_stamped.pdf");
    }
}
JAVA

List<Integer>,为需要水印的页面提供精确控制。 如果没有提供页面列表,印章将应用于所有页面。 这使得TextStamper成为您的应用程序动态生成水印时的正确选择,例如在每个生成的PDF中嵌入一个唯一的交易ID、用户名或时间戳。

重要Stamper基类。 每当您的应用程序动态生成水印,例如在每个生成的PDF上嵌入唯一的交易ID或用户名时,使用盖章方法。

对于批量处理,例如为数百个PDF标记特定于客户的唯一水印,在循环中加载和标记每个saveAs。 IronPDF独立处理每个文档,因此内存使用保持在有限范围。 Java PDF stamp指南详细介绍了ImageStamper和其他标记选项,IronPDF Java文档提供了完整的API参考。

TextStamper与applyWatermark有何不同?

applyWatermark方法针对来自HTML字符串的快速、稳定的多页标记进行了优化。 applyWatermark不够用的场景:定位一个页面子集、应用具有不同配置的多个不同标记,或从数据库或用户输入程序化构建水印参数。 两种方法都产生嵌入在PDF内容流中的矢量质量输出,因此水印可以在重新保存、打印和不存储可选内容层的PDF阅读器中存活。

使用Apache PDFBox库进行水印的开发人员会发现IronPDF的方法要简单得多。 PDFBox需要手动构建内容流并管理资源,而applyWatermark接受一个普通的HTML字符串。 Baeldung上的iText水印指南展示了使用iText完成类似任务的步骤,其中涉及创建PdfCanvas管道添加。IronPDF将其简化为单个方法调用。

PdfDocument.extractAllText()提取文本内容并检查预期的水印字符串,或使用Java PDF操作的Stack Overflow社区讨论以获取常见的故障排除模式。


Java中PDF水印的下一步是什么?

本指南涵盖了使用IronPDF for Java对PDF进行水印的四种方法:通过applyWatermark的简单文本水印,使用HTML ImageStamper程序化标记。

开始您的免费试用,在您的Java应用程序中测试水印。 试用版包括对所有盖章和水印功能的完整访问,没有评估时间限制。 当您准备好部署时,查看许可选项以找到适合您使用的级别。

准备好看看您还能做些什么吗? 在此查看完整的教程页面:IronPDF for Java 使用指南

常见问题解答

如何在 Java 中为 PDF 添加文本水印?

使用PdfDocument.fromFile()加载您的PDF,然后调用pdf.applyWatermark()和HTML字符串。由于IronPDF渲染任何有效的HTML和CSS,您可以直接在元素上设置颜色、字体大小和不透明度。

我可以在Java中使用图像作为水印吗?

可以。将<img>标签放入HTML字符串中传递给applyWatermark()。使用透明背景的PNG文件可产生最清晰的效果。您也可以使用ImageStamper类进行页面范围定位。

如何控制水印的不透明度?

将从0(完全透明)到100(完全不透明)的整数作为第二个参数传给applyWatermark()。20到40之间的值对于大多数文档表现良好且不会妨碍正文。

我可以对水印进行对角旋转吗?

是的。 在将HTML元素传递给applyWatermark()之前,向其添加CSS transform: rotate(-45deg)样式。 IronPDF在渲染期间应用所有标准的CSS3变换。

applyWatermark 和 TextStamper 之间有什么区别?

applyWatermark() 是将相同的基于HTML的印章应用到每一页的最快方法。 TextStamper 为字体、旋转和用于定位特定页面的分页列表提供了程序化控制。

如何将水印放置在特定位置?

VerticalAlignmentHorizontalAlignment枚举值作为第三和第四个参数传递给applyWatermark()。 可用位置包括TOP、MIDDLE、BOTTOM与LEFT、CENTER、RIGHT结合使用。

我可以对不同的页面应用不同的水印吗?

可以。 使用TextStamperImageStamper并将从零开始的页面编号列表传递给stamp()方法,仅针对需要特定水印的页面。

我可以在同一个PDF中组合文字和图像水印吗?

可以。 在保存之前多次调用applyWatermark()或多次调用stamp()。 每次调用都会独立向PDF内容流添加一个新图层。

Darrius Serrant
全栈软件工程师(WebOps)

Darrius Serrant 拥有迈阿密大学的计算机科学学士学位,目前在 Iron Software 担任全栈 WebOps 市场工程师。从小就被编码吸引,他认为计算机既神秘又易于接触,使其成为创意和问题解决的理想媒介。

在 Iron Software,Darrius 喜欢创造新事物,并简化复杂概念以使其更易理解。作为我们常驻的开发者之一,他还自愿教授学生,与下一代分享他的专业知识。

对于 Darrius 来说,他的工作令人满意,因为它被重视并产生真正的影响。

准备开始了吗?
版本: 2026.6 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。