diff --git a/openpdf/src/main/java/com/lowagie/text/pdf/PdfDocument.java b/openpdf/src/main/java/com/lowagie/text/pdf/PdfDocument.java index 12652b86a..f10d89801 100644 --- a/openpdf/src/main/java/com/lowagie/text/pdf/PdfDocument.java +++ b/openpdf/src/main/java/com/lowagie/text/pdf/PdfDocument.java @@ -872,6 +872,7 @@ public boolean newPage() { if (isPageEmpty()) { setNewPageSizeAndMargins(); resetText(true); + initPage(); return false; } if (!open || close) { diff --git a/openpdf/src/test/java/com/lowagie/text/pdf/PdfDocumentTest.java b/openpdf/src/test/java/com/lowagie/text/pdf/PdfDocumentTest.java index df6503805..29dc61819 100644 --- a/openpdf/src/test/java/com/lowagie/text/pdf/PdfDocumentTest.java +++ b/openpdf/src/test/java/com/lowagie/text/pdf/PdfDocumentTest.java @@ -1,12 +1,21 @@ package com.lowagie.text.pdf; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import com.lowagie.text.Document; import com.lowagie.text.Element; +import com.lowagie.text.Font; +import com.lowagie.text.HeaderFooter; +import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; +import com.lowagie.text.Phrase; +import java.io.FileOutputStream; +import java.nio.file.Path; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.DynamicTest; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestFactory; class PdfDocumentTest { @@ -57,4 +66,39 @@ private List getCellElements(PdfPTable result) { return firstCell.getColumn().compositeElements; } + + + + @Test + void createPdfFileWithAutoPageBreak() throws Exception { + Path output = Path.of("openpdf-test.pdf"); + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance( + document, + new FileOutputStream(output.toFile()) + ); + document.setHeader(new HeaderFooter(false, new Phrase("Header"))); + document.setFooter(new HeaderFooter(false, new Phrase("Footer"))); + document.open(); + Font font = new Font(Font.HELVETICA, 12); + + for (int i = 0; i < 50; i++) { + if (i == 37) { + document.newPage(); + } + var pdf = writer.getPdfDocument(); + var headerFielt = PdfDocument.class.getDeclaredField("text"); + headerFielt.setAccessible(true); + var text = (PdfContentByte) headerFielt.get(pdf); + assertTrue(String.valueOf(text.getInternalBuffer()).contains("Header"), + "Header not found: %d".formatted(i)); + assertTrue(String.valueOf(text.getInternalBuffer()).contains("Footer"), + "Footer not found: %d".formatted(i)); + document.add(new Paragraph( + "This is line " + i + " of a long text to force automatic page breaks.", + font + )); + } + document.close(); + } }