uak
uak

Reputation: 85

IText - How To Set Gradient As Background Of PDF Document?

I am using iText to generate PDF document and i want to set gradient as page background. Is this possible?

Upvotes: 0

Views: 887

Answers (1)

mkl
mkl

Reputation: 95898

(As you used only the tag "itext", not "itext7", I assume you are using iText 5.5.x.)

You can paint an axial gradient onto a PdfContentByte canvas using a PdfShading instance:

PdfShading axial = PdfShading.simpleAxial(pdfWriter, x0, y0, x1, y1, startColor, endColor, extendStart, extendEnd);
canvas.paintShading(axial);

E.g. if you want to add a light red to light green gradient to all pages of an existing PDF, you can do it like this:

PdfReader pdfReader = new PdfReader(SOURCE);
PdfStamper pdfStamper = new PdfStamper(pdfReader, TARGET);
pdfStamper.setRotateContents(false);
for (int page = 1; page <= pdfReader.getNumberOfPages(); page++) {
    Rectangle pageSize = pdfReader.getPageSize(page);
    PdfShading axial = PdfShading.simpleAxial(pdfStamper.getWriter(),
            pageSize.getLeft(pageSize.getWidth()/10), pageSize.getBottom(),
            pageSize.getRight(pageSize.getWidth()/10), pageSize.getBottom(),
            new BaseColor(255, 200, 200), new BaseColor(200, 255, 200), true, true);
    PdfContentByte canvas = pdfStamper.getUnderContent(page);
    canvas.paintShading(axial);
}
pdfStamper.close();

(AddGradientBackground test testStampGradientBackground)

Or if you want to add a light red to light green gradient to all pages of a PDF you create from scratch, you can do it like this:

Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, TARGET);
pdfWriter.setPageEvent(new GradientBackground());
document.open();
for (int i=0; i < 20; i++) {
    document.add(new Paragraph("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."));
}
document.close();

(AddGradientBackground test testCreateWithGradientBackground)

using this helper class

class GradientBackground extends PdfPageEventHelper {
    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        Rectangle pageSize = document.getPageSize();
        PdfShading axial = PdfShading.simpleAxial(writer,
                pageSize.getLeft(pageSize.getWidth()/10), pageSize.getBottom(),
                pageSize.getRight(pageSize.getWidth()/10), pageSize.getBottom(),
                new BaseColor(255, 200, 200), new BaseColor(200, 255, 200), true, true);
        PdfContentByte canvas = writer.getDirectContentUnder();
        canvas.paintShading(axial);
    }
}

(inner class in AddGradientBackground)

Results look like this:

screen shot

Upvotes: 2

Related Questions