Nico Kutscherauer created FOP-3167: -------------------------------------- Summary: Tagging attribute for TH Scope is overwritten by span attributes Key: FOP-3167 URL: https://issues.apache.org/jira/browse/FOP-3167 Project: FOP Issue Type: Bug Reporter: Nico Kutscherauer Attachments: scope-with-colspan.fo, scope-with-colspan.pdf, scope-with-colspan_headA.jpg, scope-with-colspan_headC.jpg
If a table cell has the role {{TH}} it gets a scope info as PDF tag attribute (Entry A) with the name {{/Scope}} and a value {{Column}} (default), {{Row}} or {{{}Both{}}}. This works fine, but if the {{fo:table-cell}} has an additional {{number-columns-spanned}} attribute, the Scope info is lost. The attached FO document ([^scope-with-colspan.fo]) shows two table head cells only one with {{{}number-columns-spanned{}}}{{{}=2{}}}. The screenshot shows the tag property view in Acrobat of the rendered PDF ([^scope-with-colspan.pdf]) for both cells. One has the ColSpan attribute but no Scope info: !scope-with-colspan_headA.jpg|width=591! The other with no ColSpan attribute has the Scope info: !scope-with-colspan_headC.jpg|width=591! The reason for the behavior of FOP is that the scope is written directly as {{{}"A"{}}}-Entry: {code:java} static void addScopeAttribute(PDFStructElem th, Scope scope) { PDFDictionary scopeAttribute = new PDFDictionary(); scopeAttribute.put("O", Table.NAME); scopeAttribute.put("Scope", scope.getName()); th.put("A", scopeAttribute); } {code} Source: [StandardStructureAttributes.java:58|https://github.com/apache/xmlgraphics-fop/blob/cb26fed42b675c576d8f4b69827a32a25e36c5bb/fop-core/src/main/java/org/apache/fop/pdf/StandardStructureAttributes.java#L58-L63] But the colspan/rowspan attributes are collected as a special {{attribute}} field of PDFStructElem: {code:java} public void setTableAttributeColSpan(int colSpan) { setTableAttributeRowColumnSpan("ColSpan", colSpan); } public void setTableAttributeRowSpan(int rowSpan) { setTableAttributeRowColumnSpan("RowSpan", rowSpan); } private void setTableAttributeRowColumnSpan(String typeSpan, int span) { PDFDictionary attribute = new PDFDictionary(); attribute.put("O", Table.NAME); attribute.put(typeSpan, span); if (attributes == null) { attributes = new ArrayList<PDFDictionary>(2); } attributes.add(attribute); } {code} Source: [PDFStructElem.java:230|https://github.com/apache/xmlgraphics-fop/blob/cb26fed42b675c576d8f4b69827a32a25e36c5bb/fop-core/src/main/java/org/apache/fop/pdf/PDFStructElem.java#L230-L246] At the end the field attribute overwrites the {{{}"A"{}}}-Entry: {code:java} private void attachAttributes() { if (attributes != null) { if (attributes.size() == 1) { put("A", attributes.get(0)); } else { PDFArray array = new PDFArray(attributes); put("A", array); } } } {code} Source: [PDFStructElem.java:174|https://github.com/apache/xmlgraphics-fop/blob/cb26fed42b675c576d8f4b69827a32a25e36c5bb/fop-core/src/main/java/org/apache/fop/pdf/PDFStructElem.java#L174-L183] I will see If I can produce a patch in the next days. -- This message was sent by Atlassian Jira (v8.20.10#820010)