Reputation: 85
I am using iText to generate PDF document and i want to set gradient as page background. Is this possible?
Upvotes: 0
Views: 887
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:
Upvotes: 2