Skip to content

Commit d442e4c

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

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

openpdf-core/src/main/java/org/openpdf/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-core/src/test/java/org/openpdf/text/pdf/PdfDocumentTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
package org.openpdf.text.pdf;
22

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

6+
import org.junit.jupiter.api.Test;
7+
import org.openpdf.text.Document;
58
import org.openpdf.text.Element;
9+
import org.openpdf.text.Font;
10+
import org.openpdf.text.HeaderFooter;
11+
import org.openpdf.text.PageSize;
612
import org.openpdf.text.Paragraph;
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;
1018
import org.junit.jupiter.api.TestFactory;
19+
import org.openpdf.text.Phrase;
1120

1221
class PdfDocumentTest {
1322

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

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

0 commit comments

Comments
 (0)