IText - Поворот содержимого страницы при создании PDF файла

Я хотел бы создать PDF файл, в котором есть страницы в ландшафте. Хотя можно задать размер страницы в альбомной ориентации, используя:

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

это не достигает того, что я хочу, потому что любой контент, который я добавляю, по-прежнему ориентирован влево- > вправо, в то время как я бы хотел, чтобы он был внизу- > top.

т.е. это то, что я получаю:

landscape with content left->right

Когда я хочу:

landscape with content bottom->top

Я смог добиться желаемого результата открыв PDF после его создания и вращения с помощью iText, но мне хотелось бы, чтобы решение, которое позволяет мне немедленно поместите его в iText после добавления в него контента.

Ответ 1

Отличный вопрос. Если бы я смог увеличить его дважды, я бы!

Вы можете достичь того, чего хотите, с помощью PdfPageEvent:

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

Вы должны использовать этот RotateEvent сразу после того, как вы определили автора:

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

Обратите внимание, что я использовал SEASCAPE, чтобы получить ориентацию, показанную на вашем изображении. Вы также можете использовать LANDSCAPE, если вы хотите, чтобы страница была ориентирована в другом направлении.

Мне нужно запомнить этот вопрос, когда я начну писать третье издание "iText in Action". Это хороший пример того, когда следует использовать событие onStartPage().