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);
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();