Skip to content

Commit 65a4e13

Browse files
Snipxyulian-gaponenko
authored andcommitted
Do not delete meta info in DefaultHtmlProcessor#visit
If we delete meta info early on, it will be absent when element is actually added to the document DEVSIX-5790
1 parent 69c3ffa commit 65a4e13

File tree

2 files changed

+27
-32
lines changed

2 files changed

+27
-32
lines changed

src/main/java/com/itextpdf/html2pdf/attach/impl/DefaultHtmlProcessor.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ This file is part of the iText (R) project.
4242
*/
4343
package com.itextpdf.html2pdf.attach.impl;
4444

45+
import com.itextpdf.commons.actions.EventManager;
46+
import com.itextpdf.commons.actions.sequence.AbstractIdentifiableElement;
47+
import com.itextpdf.commons.actions.sequence.SequenceId;
48+
import com.itextpdf.commons.actions.sequence.SequenceIdManager;
49+
import com.itextpdf.commons.utils.MessageFormatUtil;
4550
import com.itextpdf.html2pdf.ConverterProperties;
4651
import com.itextpdf.html2pdf.ProcessorContextCreator;
4752
import com.itextpdf.html2pdf.actions.events.PdfHtmlProductEvent;
@@ -66,11 +71,6 @@ This file is part of the iText (R) project.
6671
import com.itextpdf.io.font.FontProgram;
6772
import com.itextpdf.io.font.FontProgramFactory;
6873
import com.itextpdf.io.font.PdfEncodings;
69-
import com.itextpdf.commons.utils.MessageFormatUtil;
70-
import com.itextpdf.commons.actions.EventManager;
71-
import com.itextpdf.commons.actions.sequence.AbstractIdentifiableElement;
72-
import com.itextpdf.commons.actions.sequence.SequenceId;
73-
import com.itextpdf.commons.actions.sequence.SequenceIdManager;
7474
import com.itextpdf.kernel.pdf.PdfDocument;
7575
import com.itextpdf.layout.Document;
7676
import com.itextpdf.layout.IPropertyContainer;
@@ -358,9 +358,6 @@ private void visit(INode node) {
358358

359359
if (tagWorker != null) {
360360
tagWorker.processEnd(element, context);
361-
if (context.getState().getStack().size() == 1 && tagWorker.getElementResult() != null) {
362-
tagWorker.getElementResult().deleteOwnProperty(Property.META_INFO);
363-
}
364361
LinkHelper.createDestination(tagWorker, element, context);
365362
context.getOutlineHandler().setDestinationToElement(tagWorker, element);
366363
context.getState().pop();

src/test/java/com/itextpdf/html2pdf/HtmlConverterMetaInfoTest.java

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66
import com.itextpdf.html2pdf.attach.impl.DefaultTagWorkerFactory;
77
import com.itextpdf.html2pdf.attach.impl.tags.DivTagWorker;
88
import com.itextpdf.html2pdf.html.TagConstants;
9-
import com.itextpdf.kernel.pdf.DocumentProperties;
109
import com.itextpdf.kernel.pdf.PdfDocument;
1110
import com.itextpdf.kernel.pdf.PdfWriter;
11+
import com.itextpdf.layout.Document;
1212
import com.itextpdf.layout.IPropertyContainer;
1313
import com.itextpdf.layout.element.Div;
1414
import com.itextpdf.layout.layout.LayoutContext;
1515
import com.itextpdf.layout.layout.LayoutResult;
1616
import com.itextpdf.layout.properties.Property;
1717
import com.itextpdf.layout.renderer.DivRenderer;
1818
import com.itextpdf.layout.renderer.IRenderer;
19+
import com.itextpdf.layout.renderer.MetaInfoContainer;
1920
import com.itextpdf.styledxmlparser.node.IElementNode;
2021
import com.itextpdf.test.ExtendedITextTest;
2122
import com.itextpdf.test.annotations.type.UnitTest;
@@ -29,38 +30,35 @@
2930
public class HtmlConverterMetaInfoTest extends ExtendedITextTest {
3031

3132
@Test
32-
public void testMetaInfoShouldBePresent() {
33-
DocumentProperties documentProperties = new DocumentProperties();
33+
public void metaInfoShouldBePresentTest() {
3434
IMetaInfo o = new IMetaInfo() {};
35-
documentProperties.setEventCountingMetaInfo(o);
3635
ConverterProperties converterProperties = new ConverterProperties();
3736
converterProperties.setEventMetaInfo(o);
3837
InvocationAssert invocationAssert = new InvocationAssert();
3938
converterProperties.setTagWorkerFactory(new AssertMetaInfoTagWorkerFactory(invocationAssert));
40-
// TODO DEVSIX-5790 fix assertion error - all assertions must pass
41-
Assert.assertThrows(AssertionError.class, () -> {
42-
HtmlConverter.convertToDocument("<!DOCTYPE html>\n"
43-
+ "<html>\n"
44-
+ "\n"
45-
+ "<body>\n"
46-
+ "<div>\n"
47-
+ "The content of the div\n"
48-
+ "</div>\n"
49-
+ "</body>\n"
50-
+ "\n"
51-
+ "</html>\n",
52-
new PdfDocument(new PdfWriter(new ByteArrayOutputStream())),
53-
converterProperties
54-
).close();
55-
});
56-
// TODO DEVSIX-5790 #isInvoked status must be true
57-
Assert.assertFalse(invocationAssert.isInvoked());
39+
40+
Document document = HtmlConverter.convertToDocument("<!DOCTYPE html>\n"
41+
+ "<html>\n"
42+
+ "\n"
43+
+ "<body>\n"
44+
+ "<div>\n"
45+
+ "The content of the div\n"
46+
+ "</div>\n"
47+
+ "</body>\n"
48+
+ "\n"
49+
+ "</html>\n",
50+
new PdfDocument(new PdfWriter(new ByteArrayOutputStream())),
51+
converterProperties
52+
);
53+
54+
document.close();
55+
Assert.assertTrue(invocationAssert.isInvoked());
5856
}
5957

6058
private static class AssertMetaInfoTagWorkerFactory extends DefaultTagWorkerFactory {
6159
private final InvocationAssert invocationAssert;
6260

63-
private AssertMetaInfoTagWorkerFactory(InvocationAssert invocationAssert) {
61+
public AssertMetaInfoTagWorkerFactory(InvocationAssert invocationAssert) {
6462
this.invocationAssert = invocationAssert;
6563
}
6664

@@ -99,7 +97,7 @@ public AssertMetaInfoDivTagRenderer(Div modelElement, InvocationAssert invocatio
9997

10098
@Override
10199
public LayoutResult layout(LayoutContext layoutContext) {
102-
Assert.assertNotNull(this.getProperty(Property.META_INFO));
100+
Assert.assertNotNull(this.<MetaInfoContainer>getProperty(Property.META_INFO));
103101
invocationAssert.setInvoked(true);
104102
return super.layout(layoutContext);
105103
}

0 commit comments

Comments
 (0)