Skip to content

Commit 05f7aad

Browse files
committed
Refactor com.itextpdf.kernel.events mechanism
DEVSIX-5041
1 parent c3de33c commit 05f7aad

File tree

4 files changed

+53
-52
lines changed

4 files changed

+53
-52
lines changed

src/main/java/com/itextpdf/html2pdf/attach/impl/layout/HtmlBodyStylesApplierHandler.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.html2pdf.attach.impl.layout;
2424

25-
import com.itextpdf.kernel.events.Event;
26-
import com.itextpdf.kernel.events.IEventHandler;
27-
import com.itextpdf.kernel.events.PdfDocumentEvent;
25+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEventHandler;
26+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEvent;
27+
import com.itextpdf.kernel.pdf.event.PdfDocumentEvent;
2828
import com.itextpdf.kernel.geom.Rectangle;
2929
import com.itextpdf.kernel.pdf.PdfPage;
3030
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
@@ -42,7 +42,7 @@ This file is part of the iText (R) project.
4242
/**
4343
* This handler draws backgrounds and borders for html, body and page-annotation styles.
4444
*/
45-
class HtmlBodyStylesApplierHandler implements IEventHandler {
45+
class HtmlBodyStylesApplierHandler extends AbstractPdfDocumentEventHandler {
4646

4747
private final HtmlDocumentRenderer htmlDocumentRenderer;
4848
private final Map<Integer, PageStylesProperties> pageStylesPropertiesMap;
@@ -61,12 +61,12 @@ public HtmlBodyStylesApplierHandler(HtmlDocumentRenderer htmlDocumentRenderer,
6161
}
6262

6363
@Override
64-
public void handleEvent(Event event) {
64+
public void onAcceptedEvent(AbstractPdfDocumentEvent event) {
6565
if (!(event instanceof PdfDocumentEvent)) {
6666
return;
6767
}
6868
PdfPage page = ((PdfDocumentEvent) event).getPage();
69-
int pageNumber = ((PdfDocumentEvent) event).getDocument().getPageNumber(page);
69+
int pageNumber = event.getDocument().getPageNumber(page);
7070
processPage(page, pageNumber);
7171
}
7272

src/main/java/com/itextpdf/html2pdf/attach/impl/layout/HtmlDocumentRenderer.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ This file is part of the iText (R) project.
2525
import com.itextpdf.html2pdf.attach.ProcessorContext;
2626
import com.itextpdf.html2pdf.attach.impl.layout.HtmlBodyStylesApplierHandler.LowestAndHighest;
2727
import com.itextpdf.html2pdf.attach.impl.layout.HtmlBodyStylesApplierHandler.PageStylesProperties;
28-
import com.itextpdf.kernel.events.Event;
29-
import com.itextpdf.kernel.events.IEventHandler;
30-
import com.itextpdf.kernel.events.PdfDocumentEvent;
28+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEventHandler;
29+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEvent;
30+
import com.itextpdf.kernel.pdf.event.PdfDocumentEvent;
3131
import com.itextpdf.kernel.geom.PageSize;
3232
import com.itextpdf.kernel.geom.Rectangle;
3333
import com.itextpdf.kernel.pdf.PdfDocument;
@@ -177,8 +177,7 @@ public void close() {
177177
processWaitingElement();
178178
super.close();
179179
trimLastPageIfNecessary();
180-
document.getPdfDocument().removeEventHandler(PdfDocumentEvent.END_PAGE, marginBoxesHandler);
181-
document.getPdfDocument().removeEventHandler(PdfDocumentEvent.END_PAGE, htmlBodyHandler);
180+
removeEventHandlers();
182181
for (int i = 1; i <= document.getPdfDocument().getNumberOfPages(); ++i) {
183182
PdfPage page = document.getPdfDocument().getPage(i);
184183
if (!page.isFlushed()) {
@@ -192,9 +191,9 @@ public void close() {
192191
* Removes event handlers that were added to pdf document when this {@link HtmlDocumentRenderer} was created.
193192
*/
194193
void removeEventHandlers() {
195-
document.getPdfDocument().removeEventHandler(PdfDocumentEvent.END_PAGE, htmlBodyHandler);
196194
// This handler is added in processPageRules method.
197-
document.getPdfDocument().removeEventHandler(PdfDocumentEvent.END_PAGE, marginBoxesHandler);
195+
document.getPdfDocument().removeEventHandler(marginBoxesHandler);
196+
document.getPdfDocument().removeEventHandler(htmlBodyHandler);
198197
}
199198

200199
/* (non-Javadoc)
@@ -483,7 +482,7 @@ private boolean isPageRight(int pageNum) {
483482
return !isPageLeft(pageNum);
484483
}
485484

486-
private static class PageMarginBoxesDrawingHandler implements IEventHandler {
485+
private static class PageMarginBoxesDrawingHandler extends AbstractPdfDocumentEventHandler {
487486
private HtmlDocumentRenderer htmlDocumentRenderer;
488487

489488
PageMarginBoxesDrawingHandler setHtmlDocumentRenderer(HtmlDocumentRenderer htmlDocumentRenderer) {
@@ -492,10 +491,10 @@ PageMarginBoxesDrawingHandler setHtmlDocumentRenderer(HtmlDocumentRenderer htmlD
492491
}
493492

494493
@Override
495-
public void handleEvent(Event event) {
494+
public void onAcceptedEvent(AbstractPdfDocumentEvent event) {
496495
if (event instanceof PdfDocumentEvent) {
497496
PdfPage page = ((PdfDocumentEvent) event).getPage();
498-
PdfDocument pdfDoc = ((PdfDocumentEvent) event).getDocument();
497+
PdfDocument pdfDoc = event.getDocument();
499498
int pageNumber = pdfDoc.getPageNumber(page);
500499
processPage(pdfDoc, pageNumber);
501500
}

src/test/java/com/itextpdf/html2pdf/events/PdfHtmlAcroformDocumentEventTest.java

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ This file is part of the iText (R) project.
2424

2525
import com.itextpdf.html2pdf.ConverterProperties;
2626
import com.itextpdf.html2pdf.HtmlConverter;
27-
import com.itextpdf.kernel.events.Event;
28-
import com.itextpdf.kernel.events.IEventHandler;
29-
import com.itextpdf.kernel.events.PdfDocumentEvent;
27+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEventHandler;
28+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEvent;
29+
import com.itextpdf.kernel.pdf.event.PdfDocumentEvent;
3030
import com.itextpdf.kernel.geom.Rectangle;
3131
import com.itextpdf.kernel.pdf.PdfDocument;
3232
import com.itextpdf.kernel.pdf.PdfPage;
@@ -91,32 +91,36 @@ private PdfDocument addEventHandlersToPdfDocument(String pdfOutput, ConverterPro
9191
converterProperties);
9292
PdfWriter writer = new PdfWriter(pdfStream);
9393
PdfDocument pdfDocument = new PdfDocument(writer);
94-
IEventHandler handler = new IEventHandler() {
94+
AbstractPdfDocumentEventHandler handler = new AbstractPdfDocumentEventHandler() {
9595
@Override
96-
public void handleEvent(Event event) {
96+
public void onAcceptedEvent(AbstractPdfDocumentEvent event) {
97+
if (!(event instanceof PdfDocumentEvent)) {
98+
return;
99+
}
97100
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
98101
PdfPage page = docEvent.getPage();
99102
PdfCanvas pdfCanvas = new PdfCanvas(page);
100103
Rectangle pageSize = page.getPageSize();
101-
Canvas canvas = new Canvas(pdfCanvas, pageSize);
102-
Paragraph headerP = new Paragraph();
103-
for (IElement elem : elements) {
104-
if (elem instanceof IBlockElement) {
105-
headerP.add((IBlockElement) elem);
106-
} else if (elem instanceof Image) {
107-
headerP.add((Image) elem);
104+
try (Canvas canvas = new Canvas(pdfCanvas, pageSize)) {
105+
Paragraph headerP = new Paragraph();
106+
for (IElement elem : elements) {
107+
if (elem instanceof IBlockElement) {
108+
headerP.add((IBlockElement) elem);
109+
} else if (elem instanceof Image) {
110+
headerP.add((Image) elem);
111+
}
108112
}
109-
}
110-
Paragraph footerP = new Paragraph();
111-
for (IElement elem : footer) {
112-
if (elem instanceof IBlockElement) {
113-
footerP.add((IBlockElement) elem);
114-
} else if (elem instanceof Image) {
115-
footerP.add((Image) elem);
113+
Paragraph footerP = new Paragraph();
114+
for (IElement elem : footer) {
115+
if (elem instanceof IBlockElement) {
116+
footerP.add((IBlockElement) elem);
117+
} else if (elem instanceof Image) {
118+
footerP.add((Image) elem);
119+
}
116120
}
121+
canvas.showTextAligned(headerP, pageSize.getWidth() / 2, pageSize.getTop() - 30, TextAlignment.LEFT);
122+
canvas.showTextAligned(footerP, 0, 0, TextAlignment.LEFT);
117123
}
118-
canvas.showTextAligned(headerP, pageSize.getWidth() / 2, pageSize.getTop() - 30, TextAlignment.LEFT);
119-
canvas.showTextAligned(footerP, 0, 0, TextAlignment.LEFT);
120124
}
121125
};
122126

src/test/java/com/itextpdf/html2pdf/events/PdfHtmlPageXofYEventHandlerTest.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.html2pdf.events;
2424

25+
import com.itextpdf.commons.utils.FileUtil;
2526
import com.itextpdf.html2pdf.ConverterProperties;
2627
import com.itextpdf.html2pdf.HtmlConverter;
2728
import com.itextpdf.io.util.UrlUtil;
28-
import com.itextpdf.kernel.events.Event;
29-
import com.itextpdf.kernel.events.IEventHandler;
30-
import com.itextpdf.kernel.events.PdfDocumentEvent;
29+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEventHandler;
30+
import com.itextpdf.kernel.pdf.event.AbstractPdfDocumentEvent;
31+
import com.itextpdf.kernel.pdf.event.PdfDocumentEvent;
3132
import com.itextpdf.kernel.geom.Rectangle;
3233
import com.itextpdf.kernel.pdf.PdfDocument;
3334
import com.itextpdf.kernel.pdf.PdfPage;
@@ -46,7 +47,6 @@ This file is part of the iText (R) project.
4647
import org.junit.jupiter.api.Tag;
4748

4849
import java.io.File;
49-
import java.io.FileInputStream;
5050
import java.io.IOException;
5151

5252
@Tag("IntegrationTest")
@@ -77,44 +77,42 @@ public void parseWithFooter(String htmlSource, String pdfDest, String resoureLoc
7777
PdfWriter writer = new PdfWriter(pdfDest);
7878
PdfDocument pdfDocument = new PdfDocument(writer);
7979
//Create event-handlers
80-
PageXofY footerHandler = new PageXofY(pdfDocument);
80+
PageXofY footerHandler = new PageXofY();
8181
//Assign event-handlers
8282
pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, footerHandler);
8383
//Convert
8484
ConverterProperties converterProperties = new ConverterProperties().setBaseUri(resoureLoc);
85-
Document doc = HtmlConverter.convertToDocument(new FileInputStream(new File(htmlSource).getAbsolutePath()), pdfDocument, converterProperties);
85+
Document doc = HtmlConverter.convertToDocument(FileUtil.getInputStreamForFile(new File(htmlSource)
86+
.getAbsolutePath()), pdfDocument, converterProperties);
8687
//Write the total number of pages to the placeholder
8788
doc.flush();
8889
footerHandler.writeTotal(pdfDocument);
8990
doc.close();
9091
}
9192

9293
//page X of Y
93-
protected class PageXofY implements IEventHandler {
94+
protected static class PageXofY extends AbstractPdfDocumentEventHandler {
9495
protected PdfFormXObject placeholder;
9596
protected float side = 20;
9697
protected float x = 300;
9798
protected float y = 25;
9899
protected float space = 4.5f;
99100
protected float descent = 3;
100101

101-
public PageXofY(PdfDocument pdf) {
102-
placeholder =
103-
new PdfFormXObject(new Rectangle(0, 0, side, side));
102+
public PageXofY() {
103+
placeholder = new PdfFormXObject(new Rectangle(0, 0, side, side));
104104
}
105105

106106
@Override
107-
public void handleEvent(Event event) {
107+
public void onAcceptedEvent(AbstractPdfDocumentEvent event) {
108108
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
109109
PdfDocument pdf = docEvent.getDocument();
110110
PdfPage page = docEvent.getPage();
111111
int pageNumber = pdf.getPageNumber(page);
112112
Rectangle pageSize = page.getPageSize();
113-
PdfCanvas pdfCanvas = new PdfCanvas(
114-
page.getLastContentStream(), page.getResources(), pdf);
113+
PdfCanvas pdfCanvas = new PdfCanvas(page.getLastContentStream(), page.getResources(), pdf);
115114
Canvas canvas = new Canvas(pdfCanvas, pageSize);
116-
Paragraph p = new Paragraph()
117-
.add("Page ").add(String.valueOf(pageNumber)).add(" of");
115+
Paragraph p = new Paragraph().add("Page ").add(String.valueOf(pageNumber)).add(" of");
118116
canvas.showTextAligned(p, x, y, TextAlignment.RIGHT);
119117
pdfCanvas.addXObjectAt(placeholder, x + space, y - descent);
120118
canvas.close();

0 commit comments

Comments
 (0)