How to avoid table splitting across the pages in Word document
Syncfusion Essential DocIO is a .NET Word library used to create, read, and edit Word documents programmatically without Microsoft Word or interop dependencies. Using this library, you can avoid the table splitting across the pages in your Word document by enabling the KeepFollow API.
Steps to avoid table splitting across the pages in the Word document using C# and VB.NET
- Create a new C# console application project.
- Install the Syncfusion.DocIO.WinForms NuGet package as a reference to your .NET Framework application from NuGet.org.
- Include the following namespace in the Program.cs file.
C#
using Syncfusion.DocIO; using Syncfusion.DocIO.DLS;
VB.NET
Imports Syncfusion.DocIO Imports Syncfusion.DocIO.DLS
- Use the following code snippet to avoid the table splitting across the pages in the Word document.
C#
//Load the template Word document. using (WordDocument wordDocument = new WordDocument(@"Adventure.docx", FormatType.Docx)) { //Process the body content for each section in the Word document. foreach (WSection section in wordDocument.Sections) { //Access the Body of the section where all the contents of the document are set apart. IterateTextBody(section.Body); WHeadersFooters headersFooters = section.HeadersFooters; IterateTextBody(headersFooters.Header); IterateTextBody(headersFooters.Footer); } wordDocument.Save("Sample.docx", FormatType.Docx); } System.Diagnostics.Process.Start("Sample.docx");
VB.NET
'Load the template Word document. Using wordDocument As WordDocument = New WordDocument("Adventure.docx", FormatType.Docx) 'Process the body content for each section in the Word document. For Each section As WSection In wordDocument.Sections 'Access the Body of the section where all the contents of the document are set apart. IterateTextBody(section.Body) Dim headersFooters As WHeadersFooters = section.HeadersFooters 'Iterate through the TextBody of the Header and Footer. IterateTextBody(headersFooters.Header) IterateTextBody(headersFooters.Footer) Next wordDocument.Save("Sample.docx", FormatType.Docx) End Using System.Diagnostics.Process.Start("Sample.docx")
- Use KeepFollow API of Essential DocIO to preserve the table in the same page.
private static void IterateTextBody(WTextBody textBody) { // Iterate through each of the child items of the WTextBody. for (int i = 0; i < textBody.ChildEntities.Count; i++) { // IEntity is the basic unit in the DocIO DOM. // Access the body items (should be either paragraph, table, or block content control) as IEntity. IEntity bodyItemEntity = textBody.ChildEntities[i]; // A Text body has 3 types of elements - Paragraph, Table and Block Content Control. // Decide the element type by using EntityType. switch (bodyItemEntity.EntityType) { case EntityType.Paragraph: WParagraph paragraph = bodyItemEntity as WParagraph; // Check whether the paragraph is in cell. if (paragraph.IsInCell) // Whether there is a need to keep paragraph together on a page or in a column. paragraph.ParagraphFormat.KeepFollow = true; break; case EntityType.Table: // A Table is a collection of rows and cells. // Iterate through the table's DOM. IterateTable(bodyItemEntity as WTable); break; case EntityType.BlockContentControl: BlockContentControl blockContentControl = bodyItemEntity as BlockContentControl; // Iterate to the body items of Block Content Control. IterateTextBody(blockContentControl.TextBody); break; } } }
private static void IterateTable(WTable table) { // Disable the "is break across pages" property on the table. table.TableFormat.IsBreakAcrossPages = false; // Iterate the row collection in a table. foreach (WTableRow row in table.Rows) { // Disable the "is break across pages" property on the row. row.RowFormat.IsBreakAcrossPages = false; //Iterate the cell collection in a table row. foreach (WTableCell cell in row.Cells) { //Table cell is derived from (also a) TextBody. //Reuse the code that is meant for iterating TextBody. IterateTextBody(cell); } } }
VB.NET
Private Shared Sub IterateTextBody(ByVal textBody As WTextBody) ' iterate through each of the child items of the WTextBody. Dim i As Integer = 0 Do While (i < textBody.ChildEntities.Count) ' IEntity is the basic unit in the DocIO DOM. ' Access the body items (should be either paragraph, table or block content control) as IEntity. Dim bodyItemEntity As IEntity = textBody.ChildEntities(i) ' A Text body has 3 types of elements - Paragraph, Table and Block Content Control. ' Decide the element type by using EntityType Select Case (bodyItemEntity.EntityType) Case EntityType.Paragraph Dim paragraph As WParagraph = CType(bodyItemEntity, WParagraph) ' Check whether the paragraph is in cell. If paragraph.IsInCell Then paragraph.ParagraphFormat.KeepFollow = True End If Case EntityType.Table ' A Table is a collection of rows and cells. ' Iterate through the table's DOM. IterateTable(CType(bodyItemEntity, WTable)) Case EntityType.BlockContentControl Dim blockContentControl As BlockContentControl = CType(bodyItemEntity, BlockContentControl) ' Iterate to the body items of the Block Content Control. IterateTextBody(blockContentControl.TextBody) End Select i = (i + 1) Loop End Sub
Private Shared Sub IterateTable(ByVal table As WTable) ' Disable the "is break across pages" property on the table. table.TableFormat.IsBreakAcrossPages = False ' Iterate the row collection in a table. For Each row As WTableRow In table.Rows ' Disable the "is break across pages" property on the row. row.RowFormat.IsBreakAcrossPages = False 'Iterate the cell collection in a table row. For Each cell As WTableCell In row.Cells 'Table cell is derived from (also a) TextBody. 'Reuse the code that is meant for iterating TextBody. IterateTextBody(cell) Next Next End Sub
By executing the program, you will get the output Word document as follows.
A complete working example of how to avoid the table splitting across the pages in the Word document using C# can be downloaded from Avoid table splitting across the pages.zip.
Take a moment to peruse the document where you can find basic Word document processing options along with the features like mail merge, merge and split documents, find and replace text in the Word document, protect the Word documents, and importantly, the PDF and Image conversions with code examples.
Explore more about the rich set of Syncfusion Word Framework features.
Starting with v16.2.0.x, if you reference Syncfusion assemblies from trial setup or from the NuGet feed, include a license key in your projects. Refer the link to learn about how to generate and register a Syncfusion license key in your application to use the components without a trail message.