Skip to content

Commit 9426ea0

Browse files
committed
Move linkAnnotation outside Table-tag in tag hierarchy, add test
DEVSIX-1229
1 parent 806008c commit 9426ea0

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed

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

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,7 @@ public LayoutResult layout(LayoutContext layoutContext) {
890890
*/
891891
@Override
892892
public void draw(DrawContext drawContext) {
893+
applyDestinationsAndAnnotation(drawContext);
893894
PdfDocument document = drawContext.getDocument();
894895
boolean isTagged = drawContext.isTaggingEnabled() && getModelElement() instanceof IAccessibleElement;
895896
boolean ignoreTag = false;
@@ -914,16 +915,47 @@ public void draw(DrawContext drawContext) {
914915
applyGeneratedAccessibleAttributes(tagPointer, layoutAttributes);
915916
}
916917

917-
super.draw(drawContext);
918+
boolean relativePosition = isRelativePosition();
919+
if (relativePosition) {
920+
applyRelativePositioningTranslation(false);
921+
}
922+
923+
beginElementOpacityApplying(drawContext);
924+
drawBackground(drawContext);
925+
drawBorder(drawContext);
926+
drawChildren(drawContext);
927+
drawPositionedChildren(drawContext);
928+
endElementOpacityApplying(drawContext);
929+
930+
if (relativePosition) {
931+
applyRelativePositioningTranslation(true);
932+
}
918933

919934
tagPointer.moveToParent();
920935

921936
boolean toRemoveConnectionsWithTag = isLastRendererForModelElement && ((Table) getModelElement()).isComplete();
922937
if (toRemoveConnectionsWithTag) {
923938
tagPointer.removeElementConnectionToTag(accessibleElement);
924939
}
940+
flushed = true;
925941
} else {
926-
super.draw(drawContext);
942+
boolean relativePosition = isRelativePosition();
943+
if (relativePosition) {
944+
applyRelativePositioningTranslation(false);
945+
}
946+
947+
beginElementOpacityApplying(drawContext);
948+
drawBackground(drawContext);
949+
drawBorder(drawContext);
950+
drawChildren(drawContext);
951+
drawPositionedChildren(drawContext);
952+
endElementOpacityApplying(drawContext);
953+
954+
if (relativePosition) {
955+
applyRelativePositioningTranslation(true);
956+
}
957+
958+
flushed = true;
927959
}
928960
}
929961

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ This file is part of the iText (R) project.
5252
import com.itextpdf.kernel.font.PdfFont;
5353
import com.itextpdf.kernel.font.PdfFontFactory;
5454
import com.itextpdf.kernel.geom.PageSize;
55+
import com.itextpdf.kernel.geom.Rectangle;
5556
import com.itextpdf.kernel.pdf.CompressionConstants;
5657
import com.itextpdf.kernel.pdf.PdfArray;
5758
import com.itextpdf.kernel.pdf.PdfDictionary;
@@ -60,6 +61,7 @@ This file is part of the iText (R) project.
6061
import com.itextpdf.kernel.pdf.PdfWriter;
6162
import com.itextpdf.kernel.pdf.WriterProperties;
6263
import com.itextpdf.kernel.pdf.action.PdfAction;
64+
import com.itextpdf.kernel.pdf.annot.PdfLinkAnnotation;
6365
import com.itextpdf.kernel.pdf.canvas.draw.SolidLine;
6466
import com.itextpdf.kernel.utils.CompareTool;
6567
import com.itextpdf.layout.border.SolidBorder;
@@ -69,12 +71,14 @@ This file is part of the iText (R) project.
6971
import com.itextpdf.layout.property.TextAlignment;
7072
import com.itextpdf.layout.property.UnitValue;
7173
import com.itextpdf.layout.property.VerticalAlignment;
74+
import com.itextpdf.layout.property.Property;
7275
import com.itextpdf.test.ExtendedITextTest;
7376
import com.itextpdf.test.annotations.LogMessage;
7477
import com.itextpdf.test.annotations.LogMessages;
7578
import com.itextpdf.test.annotations.type.IntegrationTest;
7679
import org.junit.Assert;
7780
import org.junit.BeforeClass;
81+
import org.junit.Ignore;
7882
import org.junit.Test;
7983
import org.junit.experimental.categories.Category;
8084
import org.xml.sax.SAXException;
@@ -401,6 +405,26 @@ public void tableTest07() throws IOException, InterruptedException, ParserConfig
401405
compareResult("tableTest07.pdf", "cmp_tableTest07.pdf");
402406
}
403407

408+
@Ignore
409+
@Test
410+
public void linkInsideTable() throws IOException, InterruptedException, ParserConfigurationException, SAXException {
411+
PdfDocument pdf = new PdfDocument(new PdfWriter(destinationFolder + "linkInsideTable.pdf"));
412+
pdf.setTagged();
413+
Document doc = new Document(pdf);
414+
415+
Table table = new Table(new float[] {1,2,3}).setFixedLayout().setWidth(400);
416+
417+
table.addCell("1x");
418+
table.addCell("2x");
419+
table.addCell("3x");
420+
table.setProperty(Property.LINK_ANNOTATION, new PdfLinkAnnotation(new Rectangle(0, 0)).setAction(PdfAction.createURI("http://itextpdf.com/")));
421+
doc.add(table);
422+
423+
doc.close();
424+
compareResult("linkInsideTable.pdf", "cmp_linkInsideTable.pdf");
425+
}
426+
427+
404428
@Test
405429
public void tableTest08() throws IOException, InterruptedException, ParserConfigurationException, SAXException {
406430
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + "tableTest08.pdf"));

0 commit comments

Comments
 (0)