void Main() { var filename = Path.Combine(Zach.DevTestFolder, $"{Guid.NewGuid()}.pdf"); var doc = new PdfDocument(); doc.AutoTag = true; PdfPage page = doc.Pages.Add(); currentPage = page; PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 14); grid = new PdfGrid(); grid.EndCellLayout += EndCellLayout; var gridTag = new PdfStructureElement(PdfTagType.List); //grid.PdfTag = gridTag; grid.Columns.Add(2); grid.Columns[0].Width = 50; grid.Columns[1].Width = 500; // first list item // li var row = grid.Rows.Add(); var g1r1Tag = new PdfStructureElement(PdfTagType.ListItem); g1r1Tag.Parent = gridTag; //row.PdfTag = g1r1Tag; row.Height = 16; // li var g1r2 = grid.Rows.Add(); g1r2.Height = 16; var g1r2Tag = new PdfStructureElement(PdfTagType.ListItem); g1r2Tag.Parent = gridTag; //g1r2.PdfTag = g1r2Tag; // nested list grid2 = new PdfGrid(); grid2.EndCellLayout += EndCellLayoutGrid2; grid2.Columns.Add(2); grid2.Columns[0].Width = 50; grid2.Columns[1].Width = 450; var g2Tag = new PdfStructureElement(PdfTagType.List); //grid2.PdfTag = g2Tag; var g2r1 = grid2.Rows.Add(); g2r1.Height = 16; var g2r1Tag = new PdfStructureElement(PdfTagType.ListItem); g2r1Tag.Parent = g2Tag; //g2r1.PdfTag = g2r1Tag; // draw parent grid items grid.Draw(page, 0, 0, 550, new PdfGridLayoutFormat()); // save and open document using var fs = new FileStream(filename, FileMode.Create); doc.Save(fs); doc.Close(); System.Diagnostics.Process.Start(Zach.AdobeExe, filename); } // You can define other methods, fields, classes and namespaces here private void EndCellLayout(object sender, PdfGridEndCellLayoutEventArgs args) { PdfStructureElement tag; if (args.CellIndex == 0) tag = new PdfStructureElement (PdfTagType.Label); else tag = new PdfStructureElement (PdfTagType.ListBody); float x = args.CellIndex * 50; float y = args.RowIndex * 16; string content = ""; PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 14); if (args.RowIndex == 0 && args.CellIndex == 0) { content = "1."; } else if (args.RowIndex == 0 && args.CellIndex == 1) { content = "one fish"; } else if (args.RowIndex == 1 && args.CellIndex == 0) { content = "2."; } PdfGridRow row = ((PdfGrid)sender).Rows[args.RowIndex]; PdfGridCell cell = ((PdfGrid)sender).Rows[args.RowIndex].Cells[args.CellIndex]; if (!string.IsNullOrWhiteSpace(content)) { tag.Parent = (PdfStructureElement)row.PdfTag; //cell.PdfTag = tag; PdfTextElement element = new PdfTextElement(content, font); cell.Value = element; element.PdfTag = (PdfStructureElement)cell.PdfTag; element.Draw(currentPage, x, y, new PdfLayoutFormat()); } else { grid2.Draw(currentPage, 50, 16, 500, new PdfGridLayoutFormat()); } } private void EndCellLayoutGrid2(object sender, PdfGridEndCellLayoutEventArgs args) { PdfStructureElement tag; if (args.CellIndex == 0) tag = new PdfStructureElement(PdfTagType.Label); else tag = new PdfStructureElement(PdfTagType.ListBody); float y = 16; float x = args.CellIndex * 50 + 50; string content = ""; PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 14); if (args.CellIndex == 0) { content = "1."; } else if (args.CellIndex == 1) { content = "red fish"; } PdfGridRow row = ((PdfGrid)sender).Rows[args.RowIndex]; PdfGridCell cell = ((PdfGrid)sender).Rows[args.RowIndex].Cells[args.CellIndex]; tag.Parent = (PdfStructureElement)row.PdfTag; //cell.PdfTag = tag; PdfTextElement element = new PdfTextElement(content, font); element.PdfTag = (PdfStructureElement)cell.PdfTag; element.Draw(currentPage, x, y, new PdfLayoutFormat()); }