Search code examples
javapdfitextword-wrap

iText page wrapping- changes order of elements


I'm using iText to generate PDF reports when I came across this issue, and worked up a simple example to illustrate it.

I'm combining simple paragraphs, and images.

The height of the images is such that 3 will fit on a PDF page, but when if text is on a page, only 2 images will fit.

I create my PDF with the following code:

    Document document = new Document(PageSize.LETTER, 0, 0, 0, 0);
    PdfWriter writer = PdfWriter.getInstance(document, fileOutput);
    document.open();
    document.add(new Paragraph("hello world1"));
    addImage(document);
    addImage(document);
    addImage(document);
    document.add(new Paragraph("hello world2"));
    document.close();

I expect the output to look like this

hello world1
image
image
<page break>
image
hello world2

Instead, what I get is,

Hello world 1
image
image
hello world 2
<page break>
image

I'm not setting any sort of odd wrapping parameters using iText, the example really is just a simple one.

Any ideas on why it seems to be auto-wrapping this incorrectly?

In the real case, just adding a page break is not an acceptable solution.

Thanks very much.


Solution

  • Figure it out myself ;)

    writer.setStrictImageSequence(true); 
    

    It was a design decision in iText to not cut images in two, instead it adds other content first.

    setting this boolean causes iText to respect the ordering.