iText - Rotate page content while creating PDF

2019-01-25 08:18发布

问题:

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:

When what I want is:

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.

回答1:

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.



标签: java pdf itext