PDF/UA - Table Header Cell has no associated sub cells

I'm trying to create accessible pdfs with tables in them using this snippet:

PdfPage page2 = document.Pages.Add();
PdfStructureElement tableStructure = new PdfStructureElement(PdfTagType.Table);
tableStructure.ActualText = "Simple table element";
PdfGrid pdfGrid = new PdfGrid();
pdfGrid.PdfTag = tableStructure;
pdfGrid.Columns.Add(3);
PdfGridRow[] headerRows = pdfGrid.Headers.Add(1);
PdfGridRow headerRow = headerRows[0];
headerRow.Style.Font = pdfFont;
headerRow.Style.TextBrush = new PdfSolidBrush(new PdfColor(89, 89, 93));
headerRow.PdfTag = new PdfStructureElement(PdfTagType.TableRow);
headerRow.Cells[0].Value = "Employee ID";
headerRow.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableHeader);
headerRow.Cells[1].Value = "Employee Name";
headerRow.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableHeader);
headerRow.Cells[2].Value = "Salary";
headerRow.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableHeader);
PdfGridRow row = pdfGrid.Rows.Add();
row.Style.Font = pdfFont;
row.Style.TextBrush = new PdfSolidBrush(new PdfColor(89, 89, 93));
row.PdfTag = new PdfStructureElement(PdfTagType.TableRow);
row.Cells[0].Value = "E01";
row.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell);
row.Cells[1].Value = "Clay";
row.Cells[2].Value = "$1000";
row.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell);
row.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell);
pdfGrid.Draw(page2, new Point(10, 10));


When I validate it using PAC Accessibility Checker I get error: "The table header cell has no associated sub cells". How do I associate those row cells with their header?


3 Replies

IJ Irfana Jaffer Sadhik Syncfusion Team May 16, 2025 02:10 PM UTC

Hi Daniel,


Currently we are analyzing on the reported behavior with the provided details on our end and we will share the further details on May 20th,2025.



Regards,

Irfana J.



DL Daniel Lindsay May 16, 2025 04:52 PM UTC

I found the solution. I needed to set the scope like this

headerRow.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableHeader) { Scope = ScopeType.Column };



IJ Irfana Jaffer Sadhik Syncfusion Team May 20, 2025 02:32 PM UTC

Hi Daniel,


Yes scope attribute was not added to the table header. To resolve this, the appropriate scope type needs to be specified in the table header. This issue can be addressed using a sample layout. 

Please refer to the modified code snippet below.

PdfDocument pdfDocument = new PdfDocument();
pdfDocument.DocumentInformation.Title = "Table";
PdfPage pdfPage = pdfDocument.Pages.Add();
PdfStructureElement element = new PdfStructureElement(PdfTagType.Table);
PdfGrid pdfGrid = new PdfGrid();
pdfGrid.PdfTag = element;
pdfGrid.Columns.Add(3);
pdfGrid.Headers.Add(1);
PdfGridRow pdfGridHeader = pdfGrid.Headers[0];
FileStream fontStream = new FileStream(@"D:\Works\Maymonth\May20\arial-unicode-ms-regular.ttf", FileMode.Open, FileAccess.Read);
PdfFont font = new PdfTrueTypeFont(fontStream, 14);
pdfGridHeader.Style.Font = font;
pdfGridHeader.Style.TextBrush = PdfBrushes.Brown;
pdfGridHeader.PdfTag = new PdfStructureElement(PdfTagType.TableRow);
pdfGridHeader.Cells[0].Value = "Employee ID";
pdfGridHeader.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableHeader) { Scope = ScopeType.Column };
pdfGridHeader.Cells[1].Value = "Employee Name";
pdfGridHeader.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableHeader) { Scope = ScopeType.Column };
pdfGridHeader.Cells[2].Value = "Salary";
pdfGridHeader.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableHeader) { Scope = ScopeType.Column };
PdfGridRow pdfGridRow = pdfGrid.Rows.Add();
pdfGridRow.PdfTag = new PdfStructureElement(PdfTagType.TableRow);
pdfGridRow.Cells[0].Value = "E01";
pdfGridRow.Cells[1].Value = "Clay";
pdfGridRow.Cells[2].Value = "$10,000";
pdfGridRow.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell);
pdfGridRow.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell);
pdfGridRow.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell);

pdfGrid.Draw(pdfPage, PointF.Empty);
MemoryStream stream = new MemoryStream();
pdfDocument.Save(stream);


We will also address this on our documentation. 

Regards,

Irfana J. 


Loader.
Up arrow icon