Search code examples
itext7

Different PageSize for each page in itext 7


I need the page size to change to a certain page.

For example if page 3 i set pageSize A4.

If page 2 i set pageSize new Rectangle(155,155)

 String line = "Hello! Welcome to iTextPdf";
    Div div = new Div();
        for (int i = 0; i < 30; i++) {
            Paragraph element = new Paragraph();
            element.add(line + " " + i);
      

            paragraphs.add(element);

        }



--------------
  if(page==1) // This is just for an example. How I want it to be
   pdf.setDefaultPageSize(PageSize.A5);
   else if(page==3)
 element.setDefaultPageSize(PageSize.A4);

Solution

  • You can override the DocumentRenderer class and customize #addNewPage:

    private static class CustomDocumentRenderer extends DocumentRenderer {
        public CustomDocumentRenderer(Document document) {
            super(document);
        }
    
        @Override
        protected PageSize addNewPage(PageSize customPageSize) {
            if (customPageSize != null) {
                document.getPdfDocument().addNewPage(customPageSize);
                return customPageSize;
            } else {
                PageSize pageSize = definePageSizeBasedOnPageNumber(document.getPdfDocument().getNumberOfPages() + 1);
                document.getPdfDocument().addNewPage(pageSize);
                return pageSize;
            }
        }
    
        private PageSize definePageSizeBasedOnPageNumber(int curPageNumber) {
            if (curPageNumber % 2 == 1) {
                return PageSize.A4;
            } else {
                return PageSize.A4.rotate();
            }
        }
    }
    

    Here we have a helper private method definePageSizeBasedOnPageNumber to define the page size based on the page number.

    Using this customized renderer is very simple now: document.setRenderer(new CustomDocumentRenderer(document));

    Full snippet of code at the highest execution level:

    Document document = new Document(pdfDocument);
    document.setRenderer(new CustomDocumentRenderer(document));
    
    String line = "Hello! Welcome to iTextPdf";
    for (int i = 0; i < 30; i++) {
        Paragraph element = new Paragraph();
        element.add(line + " " + i);
        document.add(element);
    }
    
    document.close();