Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iText - Rotate page content while creating PDF

Tags:

java

pdf

itext

I would like to produce a PDF that has pages in landscape. While it is possible to set the size of the page to landscape using:

document.setPageSize(PageSize.LETTER.rotate());

this does not achieve what I want because any content that I add is still oriented left->right while I would like it to be bottom->top.

I.E. this is what I am getting:

landscape with content left->right

When what I want is:

landscape with content bottom->top

I have been able to achieve the desired output by opening the PDF after it has been created and rotating it using iText, but I would like a solution that lets me rotate it immediately with iText after adding content to it.

like image 891
Nathan Villaescusa Avatar asked Jan 29 '13 20:01

Nathan Villaescusa


1 Answers

Excellent question. If I was able to upvote it twice, I would!

You can achieve what you want with a PdfPageEvent:

public class RotateEvent extends PdfPageEventHelper {
    public void onStartPage(PdfWriter writer, Document document) {
        writer.addPageDictEntry(PdfName.ROTATE, PdfPage.SEASCAPE);
    }
}

You should use this RotateEvent right after you've defined the writer:

    PdfWriter writer = PdfWriter.getInstance(document, os);
    writer.setPageEvent(new RotateEvent());

Note that I used SEASCAPE to get the orientation shown in your image. You can also use LANDSCAPE if you want the page to be oriented in the other direction.

I need to remember this question once I start writing a third edition of "iText in Action". It's a nice example of when to use the onStartPage() event.

like image 142
Bruno Lowagie Avatar answered Nov 10 '22 17:11

Bruno Lowagie