javapdfitext

Rotate page content while creating PDF


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.

That is, this is what I get:

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.


Solution

  • 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.