为 PDF 添加水印

水印是出现在现有文档内容前面或后面的文本或图像,就像图章一样。例如,您可以将“机密”水印应用于包含敏感信息的页面。水印可用于保护机密信息并表明法律文件的有效性。您还可以在任何纸币上加水印,这有助于防止伪造。在本文中,我们将讨论与 PDF 文档中的水印相关的功能。

PDF 操作 REST API

Aspose.PDF Cloud 是我们屡获殊荣的 REST API,提供创建、操作以及将 PDF 文件渲染为其他受支持格式(包括 DOCXPPTXXLSXXPSSVGJPEG 等)的功能。现在让我们来谈谈 Aspose.PDF Cloud SDK for Java,它是 Aspose.PDF Cloud API 的 Java 包装器。它提供 Cloud REST API 的所有功能,包括使用 Java 编程语言向 PDF 添加水印的功能。

为了使用 Java Cloud SDK,第一步是安装 Aspose.PDF Cloud SDK for Java。Cloud SDK 可通过 Maven | GitHub 下载。下面详细介绍了如何在 Maven 构建项目中下载和使用 Aspose.Pdf.jar。

在您的 pom.xml 文件中添加以下依赖项。

<repositories>
 <repository>
        <id>aspose-cloud</id>
        <name>artifact.aspose-cloud-releases</name>
        <url>https://artifact.aspose.cloud/repo</url>
    </repository>   
</repositories>
<dependencies>
 <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-pdf-cloud</artifactId>
        <version>21.1.0</version>
        <scope>compile</scope>
    </dependency>
 </dependencies>

使用 REST API 在 PDF 中添加文本水印

为了使用云 API,您需要首先在 Aspose.Cloud 仪表板 上注册一个帐户,您将在其中看到您的个性化客户端 ID 和客户端密钥详细信息。这些对于访问 API 至关重要。下面给出了如何使用 Java 向现有 PDF 文档添加文本水印的详细信息

  • 首先,您需要根据两个变量指定您的客户端 ID 和客户端密钥详细信息。
  • 其次,通过提供客户端 ID 和客户端密钥作为参数创建 PdfApi 类的对象。
  • 第三,创建一个 TextState 类的对象,其中我们指定字体名称为 Arial,字体大小为 14。
  • 现在我们需要创建 TextStamp 类的一个实例。使用此对象时,我们将指定 HorizontalAlignment 作为中心,使用 textState(..) 方法指定文本标记值、字体大小和字体类型详细信息,其中在上述步骤中创建的 TextState 对象作为参数传递。边距详细信息和 VerticalAlignment 也指定为 Center。
  • 为了在背景中显示 TextStamp,使用了 background(..) 方法并将参数设置为 true。
  • 此外,还指定了图章的不透明度、旋转角度、缩放系数和 XY 缩进。
  • 现在创建一个类型为 TextStamp 的 List 类的对象,并将上面创建的印章对象添加到此列表中。
  • 最后,调用PdfAPi的方法postPageTextStamps(..),并将输入的PDF、页码和印章列表作为参数传递,以启动印章过程。
// 有关完整示例和源代码,请访问https://github.com/aspose-pdf-cloud/aspose-pdf-cloud-java

// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "29ac1517-753f-4303-b755-7185e35cf939";
String clientSecret = "c537caf71eafc8a75a5ee7813b703276";
				
String sourceFileName = "PdfWithTable.pdf";
int pageNumber = 1;
String cloudStorage = "";
String folder = "";

// 使用客户端 ID 和客户端密钥详细信息创建 PdfApi 实例
com.aspose.asposecloudpdf.api.PdfApi pdfApi = new com.aspose.asposecloudpdf.api.PdfApi(clientSecret,clientId);

// 创建 TextState 对象并指定字体格式详细信息
com.aspose.asposecloudpdf.model.TextState textState = new com.aspose.asposecloudpdf.model.TextState().fontSize(24.).font("Arial");

com.aspose.asposecloudpdf.model.TextStamp stamp = new com.aspose.asposecloudpdf.model.TextStamp()
       	.textAlignment(com.aspose.asposecloudpdf.model.HorizontalAlignment.CENTER)
  	.value("Text Stamp")
	.textState(textState)
	.leftMargin(1.)
	.rightMargin(2.)
	.topMargin(3.)
	.bottomMargin(4.)
	.verticalAlignment(com.aspose.asposecloudpdf.model.VerticalAlignment.CENTER);
 
	stamp.background(true)
	.horizontalAlignment(com.aspose.asposecloudpdf.model.HorizontalAlignment.CENTER)
	.opacity(1.)
	.rotate(com.aspose.asposecloudpdf.model.Rotation.ON90)
	.rotateAngle(45.)
	.xindent(0.)
	.yindent(0.)
	.zoom(1.);
        
// 创建类型为 TextStamp 的 List 对象
List<com.aspose.asposecloudpdf.model.TextStamp> stamps = new ArrayList<>();

// 将 TextStamp 实例添加到 TextStamps 列表中
stamps.add(stamp);

// 调用方法将TextStamp 发布到PDF文件的第一页
com.aspose.asposecloudpdf.model.AsposeResponse response = pdfApi.postPageTextStamps(sourceFileName, pageNumber, stamps,cloudStorage, folder);
已将文本标记添加到 PDF

图 1:- 添加到 PDF 文档的文本印章。

上述示例所用到的示例文件可以从以下链接下载:

如何使用 Java 在 PDF 中添加图像水印

只需几行代码,即可轻松将图像水印添加到 PDF 文档。下面给出了如何将 JPEG 图像添加到 PDF 文件的步骤。

  • 首先,步骤是创建一个 PdfApi 对象,同时传递 ClientSecret 和 ClientID 作为参数。
  • 下一步是创建 ImageStamp 对象,我们在其中定义要加盖印章的图像文件、边距详细信息和 VerticalAlignment。在我们的例子中,我们从 VerticalAlignment 枚举中选择了 Center 值。
  • 设置 ImageStamp.background(True),使图像显示在页面内容后面。否则,它将显示在页面内容顶部。
  • 创建一个ImageStamp类型的List对象,并将第二步创建的ImageStamp对象添加到该集合中。
  • 最后,调用 PdfApi 类的 postPageImageStamps(…) 方法,我们将输入的 PDF、水印的页码和上面创建的 ImageStamp 列表作为参数传递。
  • 带有图像水印的 PDF 文件保存在同一云存储中。结果文件的预览显示如下。
// 有关完整示例和源代码,请访问https://github.com/aspose-pdf-cloud/aspose-pdf-cloud-java

// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "c235e685-1aab-4cda-a95b-54afd63eb87f";
String clientSecret = "b8da4ee37494f2ef8da3c727f3a0acb9";

// 创建 PdfApii 实例
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// 输入PDF文档
String file = "PdfWithTable.pdf";
// 用于水印的源图像
String image = "Koala.jpg";
// 添加水印的页码
int pageNumber = 1;

// 创建 ImageStamp 对象的实例
ImageStamp stampObject = new ImageStamp()
	.fileName(image)
	.leftMargin(1.)
	.rightMargin(2.)
	.topMargin(3.)
	.bottomMargin(214.)
	.verticalAlignment(com.aspose.asposecloudpdf.model.VerticalAlignment.CENTER);
	
	// 在页面内容后面添加水印
	stampObject.background(true)
	.horizontalAlignment(com.aspose.asposecloudpdf.model.HorizontalAlignment.CENTER)
	.opacity(1.)
	.rotate(com.aspose.asposecloudpdf.model.Rotation.NONE)
	.rotateAngle(0.)
	.xindent(0.)
	.yindent(0.)
	.zoom(0.2);

// 创建 ImageStamp 对象列表
List<com.aspose.asposecloudpdf.model.ImageStamp> stamps = new ArrayList<>();

// 将 ImageStamp 添加到 ImageStamps 列表中
stamps.add(stampObject);

// 调用API方法将水印图像添加到PDF
AsposeResponse response = pdfApi.postPageImageStamps(file, pageNumber, stamps,null, null);
图像印章已添加到 PDF

图像 2:- 已添加到 PDF 文档的图像印章。

可以从以下链接下载上述示例中使用的示例文件。

添加 PDF 页面作为水印戳

除了文本和图像之外,PDF 页面还可以作为水印添加到现有 PDF 文档中。下面给出了如何实现这些要求的步骤。

  • 首先,创建一个 PdfApi 类的对象,并传递客户端 ID 和客户端密钥作为参数。
  • 其次,创建PdfPageStamp类的实例。该类用于指定PDF文档的路径,并将用于水印。
  • PdfPageStamp.pageIndex(..) 方法用于指定用于水印的 PDF 文件的页码。
  • 在其他方法中,background(..) 很重要,因为它用于在 PDF 内容后面设置水印或将其保留在内容上方。
  • 然后创建一个PdfPageStamp类型的List,并将上面创建的PdfPageStamp对象添加到List集合中。
  • 最后,调用 PdfApi 类的方法 postPagePdfPageStamps(…),我们将源 PDF 文件、要加水印的页面索引和 PdfPageStamp 列表作为参数传递。结果输出保存在云存储中。
// 有关完整示例和源代码,请访问https://github.com/aspose-pdf-cloud/aspose-pdf-cloud-java

// 从 https://cloud.aspose.com 获取 ClientID 和 ClientSecret
String clientId = "c235e685-1aab-4cda-a95b-54afd63eb87f";
String clientSecret = "b8da4ee37494f2ef8da3c727f3a0acb9";

// 创建 PdfApi 实例
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// 输入PDF文档
String sourcePDF = "PdfWithAnnotations.pdf";

// 用于水印的源 PDF
String stampPDF = "rusdoc.pdf";

// 添加水印的页码
int pageNumber = 1;

// 创建 PdfPageStamp 对象的实例
PdfPageStamp stampObject = new PdfPageStamp()
	// 用作水印的 PDF 文件
  	.fileName(stampPDF)
	// 指定要添加为水印的页面索引
	.pageIndex(1)
	.leftMargin(150.)
	.rightMargin(2.)
	
	// 我们已经设置了-ve 顶部边距以将水印 PDF 向上移动
	.topMargin(-330.)
	.bottomMargin(414.)
	
  	// 将水印垂直对齐设置为顶部
	.verticalAlignment(com.aspose.asposecloudpdf.model.VerticalAlignment.TOP);
	
  	// 将水印置于前台/可见
	stampObject.background(false)
	.horizontalAlignment(com.aspose.asposecloudpdf.model.HorizontalAlignment.CENTER)
	.opacity(1.)
	.rotate(com.aspose.asposecloudpdf.model.Rotation.NONE)
	.rotateAngle(0.)
	.xindent(0.)
	.yindent(0.)
	
  	// 将缩放系数设置为 0.7,这样它就会被挤压,而不是以 100% 的比例显示
	.zoom(0.7);

// 创建 PdfPageStamp 对象列表
List<com.aspose.asposecloudpdf.model.PdfPageStamp> stamps = new ArrayList<>();
	
// 将 PdfPageStamp 添加到 ImageStamps 列表中
stamps.add(stampObject);
	
// 调用API方法添加PDF水印
AsposeResponse response = pdfApi.postPagePdfPageStamps(sourcePDF, pageNumber, stamps,null, null);
PDF文件作为水印

图 3:添加为水印的 PDF 文件的预览。

上述示例中使用的示例文件可以从以下链接下载

添加页码作为水印

从可用性角度来看,页码细节非常重要,因为它们可以清楚地向读者表明文档的长度以及读者正在浏览的页面。

  • 一旦我们创建了 PdfApi 实例,就创建 PageNumberStamp 类的对象。
  • 使用 PageNumberStamp 类的方法 value(…) 来指定 PageNumber 戳的模式。
  • 另一个重要方法是 setStartingNumber(..),它指示页码水印从哪个计数开始。
  • 代码的其他部分包括边距细节、不透明度、旋转角度、oom 因子等与上面的代码片段相同。
  • 我们需要指定放置页码水印的startPageNumber和endPageNumber。
  • 最后,调用 postDocumentPageNumberStamps(…),它将输入的 PDF 文件、PageNumberStamp 对象、起始和结束页面信息作为参数,并在源文件中附加页码水印。
// 有关完整示例和源代码,请访问https://github.com/aspose-pdf-cloud/aspose-pdf-cloud-java

// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "c235e685-1aab-4cda-a95b-54afd63eb87f";
String clientSecret = "b8da4ee37494f2ef8da3c727f3a0acb9";
				
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// 输入PDF文档
String sourcePDF = "PdfWithTable.pdf";

// 创建 PdfPageStamp 对象的实例
PageNumberStamp stampObject = new PageNumberStamp()

	// 页码水印的格式
  	.value("Page #")
	.leftMargin(1.)
	.rightMargin(2.)
	.topMargin(3.)
	.bottomMargin(4.)
	
	// 将水印垂直对齐设置为底部
	.verticalAlignment(com.aspose.asposecloudpdf.model.VerticalAlignment.BOTTOM);
	
	// 指定计数器的起始数字
	stampObject.setStartingNumber(3);

	// 将水印置于前台/可见
	stampObject.background(false)
	
	.horizontalAlignment(com.aspose.asposecloudpdf.model.HorizontalAlignment.CENTER)
	.opacity(1.)
	.rotate(com.aspose.asposecloudpdf.model.Rotation.NONE)
	.rotateAngle(0.)
	.xindent(0.)
	.yindent(0.)
	.zoom(1.0);

// 起始页表格水印放在哪里
int startPageNumber = 2;
	
// 应放置水印的页面索引
int endPageNumber = 3;
	
// 调用API方法添加PDF水印
AsposeResponse response = pdfApi.postDocumentPageNumberStamps(sourcePDF, stampObject,startPageNumber, endPageNumber, null, null);
PDF 中的页码标记

图 4:- PDF 中页码作为水印的预览。

上述示例所用到的示例文件可以从以下链接下载:

快速提示

Aspose.PDF Cloud SDK for Java 功能非常强大,只需几行代码,您就可以将 JPEGEPUBLaTeXHTMLPSXSLFoXPSSVGDOCXPCL 格式转换为 PDF 格式。有关更多信息,请访问 产品页面

结论

在这篇博文中,我们了解了如何使用 Aspose.PDF Cloud SDK for Java 轻松地将文本、图像、PDF 和页码信息添加到现有 PDF 文档的步骤。请注意,我们的 Cloud SDK 是开源的,您也可以下载其完整的源代码并根据您的要求进行修改。完整的源代码可以从 GitHub 存储库下载。如果您有任何相关疑问,请随时通过 免费支持论坛 联系。