Skip to content

Commit d18829e

Browse files
committed
Bypass MCR-entities when drawing Table's kids to avoid exception
DEVSIX-1229
1 parent 414a0e4 commit d18829e

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

layout/src/main/java/com/itextpdf/layout/renderer/TableRenderer.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -978,9 +978,22 @@ public void drawChildren(DrawContext drawContext) {
978978
adjustByHeaderRowsNum = modelElement.getHeader().getNumberOfRows();
979979
}
980980
int cellRow = ((Cell) child.getModelElement()).getRow() + adjustByHeaderRowsNum;
981-
int rowsNum = tagPointer.getKidsRoles().size();
982-
if (cellRow < rowsNum) {
983-
tagPointer.moveToKid(cellRow);
981+
int cellRowKidIndex = -1;
982+
int foundRowsNum = 0;
983+
List<PdfName> kidsRoles = tagPointer.getKidsRoles();
984+
for (int i = 0; i < kidsRoles.size(); ++i) {
985+
PdfName kidRole = kidsRoles.get(i);
986+
if (kidRole == null || PdfName.TR.equals(kidRole)) {
987+
++foundRowsNum;
988+
}
989+
if (foundRowsNum - 1 == cellRow) {
990+
cellRowKidIndex = i;
991+
break;
992+
}
993+
}
994+
995+
if (cellRowKidIndex > -1) {
996+
tagPointer.moveToKid(cellRowKidIndex);
984997
} else {
985998
tagPointer.addTag(PdfName.TR);
986999
}

layout/src/test/java/com/itextpdf/layout/AutoTaggingTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ This file is part of the iText (R) project.
7878
import com.itextpdf.test.annotations.type.IntegrationTest;
7979
import org.junit.Assert;
8080
import org.junit.BeforeClass;
81-
import org.junit.Ignore;
8281
import org.junit.Test;
8382
import org.junit.experimental.categories.Category;
8483
import org.xml.sax.SAXException;
@@ -405,7 +404,6 @@ public void tableTest07() throws IOException, InterruptedException, ParserConfig
405404
compareResult("tableTest07.pdf", "cmp_tableTest07.pdf");
406405
}
407406

408-
@Ignore
409407
@Test
410408
public void linkInsideTable() throws IOException, InterruptedException, ParserConfigurationException, SAXException {
411409
PdfDocument pdf = new PdfDocument(new PdfWriter(destinationFolder + "linkInsideTable.pdf"));

0 commit comments

Comments
 (0)