Skip to content

Commit 1d32a69

Browse files
committed
Fix 1509: Re-add the header and footer when newPage() is called explicitly after it was called implicitly.
1 parent b1d2d53 commit 1d32a69

2 files changed

Lines changed: 45 additions & 0 deletions

File tree

openpdf/src/main/java/com/lowagie/text/pdf/PdfDocument.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,7 @@ public boolean newPage() {
872872
if (isPageEmpty()) {
873873
setNewPageSizeAndMargins();
874874
resetText(true);
875+
initPage();
875876
return false;
876877
}
877878
if (!open || close) {

openpdf/src/test/java/com/lowagie/text/pdf/PdfDocumentTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
package com.lowagie.text.pdf;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
45

6+
import com.lowagie.text.Document;
57
import com.lowagie.text.Element;
8+
import com.lowagie.text.Font;
9+
import com.lowagie.text.HeaderFooter;
10+
import com.lowagie.text.PageSize;
611
import com.lowagie.text.Paragraph;
12+
import com.lowagie.text.Phrase;
13+
import java.io.FileOutputStream;
14+
import java.nio.file.Path;
715
import java.util.Arrays;
816
import java.util.List;
917
import org.junit.jupiter.api.DynamicTest;
18+
import org.junit.jupiter.api.Test;
1019
import org.junit.jupiter.api.TestFactory;
1120

1221
class PdfDocumentTest {
@@ -57,4 +66,39 @@ private List<Element> getCellElements(PdfPTable result) {
5766
return firstCell.getColumn().compositeElements;
5867
}
5968

69+
70+
71+
72+
@Test
73+
void createPdfFileWithAutoPageBreak() throws Exception {
74+
Path output = Path.of("openpdf-test.pdf");
75+
Document document = new Document(PageSize.A4);
76+
PdfWriter writer = PdfWriter.getInstance(
77+
document,
78+
new FileOutputStream(output.toFile())
79+
);
80+
document.setHeader(new HeaderFooter(false, new Phrase("Header")));
81+
document.setFooter(new HeaderFooter(false, new Phrase("Footer")));
82+
document.open();
83+
Font font = new Font(Font.HELVETICA, 12);
84+
85+
for (int i = 0; i < 50; i++) {
86+
if (i == 37) {
87+
document.newPage();
88+
}
89+
var pdf = writer.getPdfDocument();
90+
var headerFielt = PdfDocument.class.getDeclaredField("text");
91+
headerFielt.setAccessible(true);
92+
var text = (PdfContentByte) headerFielt.get(pdf);
93+
assertTrue(String.valueOf(text.getInternalBuffer()).contains("Header"),
94+
"Header not found: %d".formatted(i));
95+
assertTrue(String.valueOf(text.getInternalBuffer()).contains("Footer"),
96+
"Footer not found: %d".formatted(i));
97+
document.add(new Paragraph(
98+
"This is line " + i + " of a long text to force automatic page breaks.",
99+
font
100+
));
101+
}
102+
document.close();
103+
}
60104
}

0 commit comments

Comments
 (0)