lucasvw lucasvw - 3 months ago 25
Java Question

Use an Image as a watermark in iText 7

iText 7 just came out May 2016, and while some of the tutorials have been helpful, some of the more advanced functions have been harder to figure out. This page has an example of how to use text as a watermark (about 90% of the way down the page), but I can't figure out how to use an Image as a watermark, and I really have no idea where to start with the new release. Anyone know how to use an Image as a watermark in iText 7? Any ideas where to start?

Answer

I'm not 100% positive this is the right way to do this but I'd say I'm 95% confident.

Using the tutorial for iText 7 that you linked to as a starting guide along with the iText 5 version we can use a "graphics state" to modify the current canvas.

(The code below is C# but you should be able to convert it to Java pretty easily, pretty much just lowercase the first letter of properties and methods. Also, I'm using full namespace paths just so you know where things are at.)

First, create a custom state and set its transparency:

//Create a transparent state
iText.Kernel.Pdf.Extgstate.PdfExtGState tranState = new iText.Kernel.Pdf.Extgstate.PdfExtGState();
tranState.SetFillOpacity(0.5f);

Second, get your image:

//Get your image somehow
iText.IO.Image.ImageData myImageData = ImageDataFactory.Create("D:\\14.jpg", false);
iText.Layout.Element.Image myImage = new iText.Layout.Element.Image(myImageData);

Third (and optional), change your image if needed:

//Position, rotate and scale it as needed
myImage.SetFixedPosition(100, 100);
myImage.SetRotationAngle(45);
myImage.ScaleAbsolute(200, 200);

Fourth, save the pdfCanvas (from the tutorial) state and set a new one:

pdfCanvas.SaveState().SetExtGState(tranState);

Fifth, add your image to the higher level canvas (once again, from the tutorial):

canvas.Add(myImage);

And sixth, reset the pdfCanvas state:

pdfCanvas.RestoreState();

Update by Bruno:

Adding images is explained in Chapter 3 of the "iText 7: Building Blocks" tutorial. In chapter 3 of "iText 7: Jump-Start tutorial", we work with a PdfCanvas and Canvas object. The missing information about how to create and add an image is in the "Building Blocks" tutorial.