Page events for Watermarking
watermarking
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
/**
* Adding a watermark to the document immediately using a page event.
*/
package com.itextpdf.samples.sandbox.events;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.properties.TextAlignment;
import com.itextpdf.layout.properties.UnitValue;
import com.itextpdf.layout.properties.VerticalAlignment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Watermarking {
public static final String DEST = "./target/sandbox/events/watermarkings.pdf";
public static final String DATA = "./src/main/resources/data/united_states.csv";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Watermarking().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new WatermarkingEventHandler());
PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA);
PdfFont bold = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
Table table = new Table(UnitValue.createPercentArray(new float[] {4, 1, 3})).useAllAvailableWidth();
try (BufferedReader br = new BufferedReader(new FileReader(DATA))) {
String line = br.readLine();
parseTextLine(table, line, bold, true);
while ((line = br.readLine()) != null) {
parseTextLine(table, line, font, false);
}
}
doc.add(table);
doc.close();
}
private static void parseTextLine(Table table, String line, PdfFont font, boolean isHeader) {
StringTokenizer tokenizer = new StringTokenizer(line, ";");
int c = 0;
while (tokenizer.hasMoreTokens() && c++ < 3) {
Cell cell = new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font));
if (isHeader) {
table.addHeaderCell(cell);
} else {
table.addCell(cell);
}
}
}
private static class WatermarkingEventHandler implements IEventHandler {
@Override
public void handleEvent(Event currentEvent) {
PdfDocumentEvent docEvent = (PdfDocumentEvent) currentEvent;
PdfDocument pdfDoc = docEvent.getDocument();
PdfPage page = docEvent.getPage();
PdfFont font = null;
try {
font = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
} catch (IOException e) {
// Such an exception isn't expected to occur,
// because helvetica is one of standard fonts
System.err.println(e.getMessage());
}
PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);
new Canvas(canvas, page.getPageSize())
.setFontColor(ColorConstants.LIGHT_GRAY)
.setFontSize(60)
// If the exception has been thrown, the font variable is not initialized.
// Therefore null will be set and iText will use the default font - Helvetica
.setFont(font)
.showTextAligned(new Paragraph("WATERMARK"), 298, 421, pdfDoc.getPageNumber(page),
TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45)
.close();
}
}
}
C#
C#
using System;
using System.IO;
using iText.Commons.Utils;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Events;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
namespace iText.Samples.Sandbox.Events
{
public class Watermarking
{
public static readonly String DEST = "results/sandbox/events/watermarkings.pdf";
public static readonly String DATA = "../../../resources/data/united_states.csv";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new Watermarking().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new WatermarkingEventHandler());
PdfFont font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
PdfFont bold = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);
Table table = new Table(UnitValue.CreatePercentArray(new float[] {4, 1, 3})).UseAllAvailableWidth();
using (StreamReader br = new StreamReader(new FileStream(DATA, FileMode.Open)))
{
String line = br.ReadLine();
ParseTextLine(table, line, bold, true);
while ((line = br.ReadLine()) != null)
{
ParseTextLine(table, line, font, false);
}
}
doc.Add(table);
doc.Close();
}
private static void ParseTextLine(Table table, String line, PdfFont font, bool isHeader)
{
StringTokenizer tokenizer = new StringTokenizer(line, ";");
int c = 0;
while (tokenizer.HasMoreTokens() && c++ < 3)
{
Cell cell = new Cell().Add(new Paragraph(tokenizer.NextToken()).SetFont(font));
if (isHeader)
{
table.AddHeaderCell(cell);
}
else
{
table.AddCell(cell);
}
}
}
private class WatermarkingEventHandler : IEventHandler
{
public void HandleEvent(Event currentEvent)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent) currentEvent;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
PdfFont font = null;
try
{
font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);
}
catch (IOException e)
{
// Such an exception isn't expected to occur,
// because helvetica is one of standard fonts
Console.Error.WriteLine(e.Message);
}
PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
new Canvas(canvas, page.GetPageSize())
.SetFontColor(ColorConstants.LIGHT_GRAY)
.SetFontSize(60)
// If the exception has been thrown, the font variable is not initialized.
// Therefore null will be set and iText will use the default font - Helvetica
.SetFont(font)
.ShowTextAligned(new Paragraph("WATERMARK"), 298, 421, pdfDoc.GetPageNumber(page),
TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45)
.Close();
}
}
}
}