使用Java为 PDF 中的图像添加水印
在本文中,我们将学习如何使用Java为 PDF 文档中的图像添加水印。为 PDF 中的图像添加水印,我们将使用iText库。这些是使用Java为 PDF 中的图像添加水印应遵循的步骤。
1. 创建一个 PdfWriter 对象
PdfWriter 类代表 PDF 的 DocWriter。此类的构造函数接受一个字符串,即要创建 PDF 的文件的路径。
// importing the PdfWriter class.
import com.itextpdf.kernel.pdf.PdfWriter;
// path where the pdf is to be created.
String path = "F:/JavaPdf/waterMarkImage.pdf";
PdfWriter pdfwriter = new PdfWriter(path);
2. 创建一个 PdfDocument 对象
PdfDocument 类是 iText 中表示 PDF 文档的类,要在写入模式下实例化此类,您需要将类 PdfWriter(即上述代码中的 pdfwriter)的对象传递给其构造函数。
// Creating a PdfDocument object.
// passing PdfWriter object constructor of pdfDocument.
PdfDocument pdfdocument = new PdfDocument(pdfwriter);
3. 创建文档对象
Document 类是创建自给自足的 PDF 时的根元素。此类的构造函数之一接受类 PdfDocument(即 pdfdocument)的对象。
// Creating a Document and passing pdfDocument object
Document document = new Document(pdfdocument);
4. 创建一个 Image 对象
我们需要图像对象来管理图像。为了创建一个图像对象,我们需要创建一个 ImageData 对象。我们可以通过将表示图像路径的字符串参数传递给 ImageDataFactory 类的 create() 方法来创建它。现在我们可以通过将 ImageData 对象作为参数传递给 Image 类的构造函数来创建一个图像对象。
// Create an ImageData object
String imageFile = "F:/JavaPdf/image.png";
ImageData data = ImageDataFactory.create(imageFile);
// Creating an Image object
Image image = new Image(data);
5. 创建模板
模板是 PdfFormXObject 的对象,稍后我们在此模板中添加图像和水印。 PdfFormXObject 的构造函数以一个矩形为参数,之后我们将 Template 和 pdfDocument 的实例传递给 Canvas 对象。将图像添加到画布对象。
现在我们将图像添加到画布对象并设置水印。
//Creating template
PdfFormXObject template = new PdfFormXObject(new Rectangle(
image.getImageScaledWidth(), image.getImageScaledHeight()));
Canvas canvas = new Canvas(template, pdfdocument).add(image);
String watermark = "GeeksForGeeks";
canvas.setFontColor(DeviceGray.GRAY).showTextAligned(watermark, 120, 300, TextAlignment.CENTER);
6. 添加模板到文档并关闭文档
现在我们使用 add() 方法将模板添加到文档并使用 close() 关闭文档。
//adding template to document
Image imagew = new Image(template);
document.add(imagew);
//closing the document
document.close();
System.out.println("Applied the Water Mark successfully");
执行以下程序的依赖项:
kernel-7.1.13.jar
layout-7.1.13.jar
io-7.1.13.jar
代码片段:
Java
// Java program to Add Water Marks to the Images in a PDF
import com.itextpdf.kernel.colors.DeviceGray;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.property.TextAlignment;
public class AddingToImagesInPDF {
public static void main(String args[]) throws Exception
{
String path = "F:/JavaPdf/waterMarkImage.pdf";
PdfWriter pdfwriter = new PdfWriter(path);
// Creating a PdfDocument object.
// passing PdfWriter object constructor of
// pdfDocument.
PdfDocument pdfdocument
= new PdfDocument(pdfwriter);
// Creating a Document and passing pdfDocument
// object
Document document = new Document(pdfdocument);
// Create an ImageData object
String imageFile = "F:/JavaPdf/image.png";
ImageData data = ImageDataFactory.create(imageFile);
// Creating an Image object
Image image = new Image(data);
image.scaleToFit(400, 700);
// Creating template
PdfFormXObject template = new PdfFormXObject(
new Rectangle(image.getImageScaledWidth(),
image.getImageScaledHeight()));
Canvas canvas
= new Canvas(template, pdfdocument).add(image);
String watermark = "GeeksForGeeks";
canvas.setFontColor(DeviceGray.GRAY)
.showTextAligned(watermark, 120, 300,
TextAlignment.CENTER);
// adding template to document
Image imagew = new Image(template);
document.add(imagew);
// closing the document
document.close();
System.out.println(
"Applied the Water Mark successfully");
}
}
输出
Applied the Water Mark successfully