Reputation: 11571
When an Element
gets moved to a new page because of a setKeepTogether(true)
configuration, I need to a text "Continutation of ..." to the new page.
I tried that with the PageEvent.onStartPage()
but it's not allowed to call Document.add()
inside a PageEvent
.
But how to solve that now?
This small example reproduces my problem:
public class Main {
public static String continuation = null;
public static void main(final String[] args) throws Exception {
final Document document = new Document(PageSize.A7);
final PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("text.pdf"));
document.open();
// Now I add the introduction text
document.add(new Paragraph("A nice \nIntroduction \nover some lines."));
// Now I put my "huge" paragraph. When it breaks,
// the first line of the new page should be "Continuation of smth."
continuation = "smth.";
final Paragraph paragraph = new Paragraph("What is \nthe answer \nto life the \nuniverse and \neverything?\n\nThe Answer to \nthis question \nis:\n42");
paragraph.setKeepTogether(true);
document.add(paragraph);
document.close();
}
}
The result should look somehow like this.
Upvotes: 3
Views: 294
Reputation: 11571
This can be hacked by utelizing the headerRows
of a PdfPTable
.
It is really a hack, maybe someone else has a better idea to reach the goal:
public static void main(final String[] args) throws Exception
{
final Document document = new Document(PageSize.A7);
PdfWriter.getInstance(document, new FileOutputStream("text.pdf"));
document.open();
// The content gets wrapped into an table. If the table breaks
// we utilize the "headerRows" to print `Continuation of xx`.
final PdfPTable table = new PdfPTable(1);
table.setHeadersInEvent(false);
table.setHeaderRows(1);
table.setSkipFirstHeader(true);
table.setWidthPercentage(100);
table.getDefaultCell().setBorder(0);
table.getDefaultCell().setPadding(0);
// This is the header we print ONLY if the page breaks.
table.addCell("Continuation of " + "smth.");
// Now I add the introduction text
final PdfPTable firstText = new PdfPTable(1);
firstText.addCell("A nice \nIntroduction \ninto \"smth.\" \nover some lines.");
// in the original code i add some other things here as well
table.addCell(firstText);
// Now I put a "huge" paragraph (it will not fit on the first page
final PdfPTable secondText = new PdfPTable(1);
secondText.addCell("Force \na pagebreak\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf\nasdf.");
// in the original code i add some other things here as well
table.addCell(secondText);
document.add(table);
document.close();
}
The code generates the correct PDF. But the way is really ugly...
I've uploded the PDF here.
Upvotes: 1