# Extract Plain Text from Office Open XML DOCX and DOC Documents in ASP.NET Core C#

> This article shows how to extract plain text from Office Open XML DOCX and DOC documents in ASP.NET Core C#. It shows how to convert the binary DOCX and DOC files to plain text using the ServerTextControl class and how to extract specific areas of the document.

- **Author:** Bjoern Meyer
- **Published:** 2024-05-31
- **Modified:** 2026-07-17
- **Description:** This article shows how to extract plain text from Office Open XML DOCX and DOC documents in ASP.NET Core C#. It shows how to convert the binary DOCX and DOC files to plain text using the ServerTextControl class and how to extract specific areas of the document.
- **4 min read** (793 words)
- **Tags:**
  - ASP.NET
  - ASP.NET Core
  - Text
  - Plain text
- **Web URL:** https://www.textcontrol.com/blog/2024/05/31/extract-plain-text-from-office-open-xml-docx-and-doc-documents-in-asp-net-core-c-sharp/
- **LLMs URL:** https://www.textcontrol.com/blog/2024/05/31/extract-plain-text-from-office-open-xml-docx-and-doc-documents-in-asp-net-core-c-sharp/llms.txt
- **LLMs-Full URL:** https://www.textcontrol.com/blog/2024/05/31/extract-plain-text-from-office-open-xml-docx-and-doc-documents-in-asp-net-core-c-sharp/llms-full.txt

---

Extracting plain text from Office Open XML DOCX and DOC files is required in many different applications. Whether you are indexing text for a search engine, an AI-powered text analytics tool, or a text-to-speech system, you need to extract text from DOCX and DOC files. In this article, we will show you how to extract plain text from DOCX and DOC files using C#.

TX Text Control provides a very powerful API to extract text from DOCX and DOC files. You can convert the entire document or just a specific range of pages or text between two specific text positions. The following code shows how to extract plain text from a DOCX file using TX Text Control:

### Preparing the Application

A .NET 6 console application is created for the purposes of this demo.

> #### Prerequisites
> 
>  The following tutorial requires a trial version of TX Text Control .NET Server.
> 
> - [Download Trial Version](https://www.textcontrol.com/product/tx-text-control-dotnet-server/download/)

1. In Visual Studio, create a new *Console App* using .NET 8.
2. In the *Solution Explorer*, select your created project and choose *Manage NuGet Packages...* from the *Project* main menu.
    
    Select *Text Control Offline Packages* from the *Package source* drop-down.
    
    Install the latest versions of the following package:
    
    
    - TXTextControl.TextControl.ASP.SDK
    
    ![Create PDF](https://s1-www.textcontrol.com/assets/dist/blog/2024/05/31/a/assets/step1.webp "Create PDF")

### Extracting Text from DOCX Files

After installing the required NuGet package, you can use the following code to extract plain text from a DOCX file:

```
try
{
  using TXTextControl.ServerTextControl tx = new TXTextControl.ServerTextControl();
  
  tx.Create();
  
  tx.Load("document.docx", TXTextControl.StreamType.WordprocessingML);
  tx.Save(out string plainText, TXTextControl.StringStreamType.PlainText);

  Console.WriteLine(plainText);
}
catch (Exception ex)
{
  Console.WriteLine($"An error occurred: {ex.Message}");
}
```

The code snippet above loads a DOCX file and extracts the complete plain text from the document. The extracted text is then written to the console.

### Extracting Text Between Headings

TX Text Control provides a powerful API to extract text between two specific text positions. Consider a scenario where you want to get all the text sections between chapter titles that are defined by stylesheets.

Consider the following document:

![Extracting text with TX Text Control](https://s1-www.textcontrol.com/assets/dist/blog/2024/05/31/a/assets/extract1.webp "Extracting text with TX Text Control")

We want to extract the complete text between the headings with the stylesheet names *Heading1*. The following code shows how to extract the text between these two headings:

```
List<string> ExtractTextBlocks(string paragraphStyleName, ServerTextControl serverTextControl, bool includeRemainingText)
{
    List<string> textBlocks = new List<string>();
    bool capturing = false;
    StringBuilder currentBlock = new StringBuilder();

    for (int i = 1; i < serverTextControl.Paragraphs.Count - 1; i++)
    {
        Paragraph paragraph = serverTextControl.Paragraphs[i];

        if (paragraph.FormattingStyle == paragraphStyleName)
        {
            if (capturing)
            {
                textBlocks.Add(currentBlock.ToString().Trim());
                currentBlock.Clear();
            }
            else
            {
                capturing = true;
            }
        }
        else if (capturing)
        {
            currentBlock.AppendLine(paragraph.Text);
        }
    }

    // Add remaining text if still capturing at the end
    if (includeRemainingText && (capturing || currentBlock.Length > 0))
    {
        textBlocks.Add(currentBlock.ToString().Trim());
    }

    return textBlocks;
}
```

The code snippet below loads a DOCX file and extracts the text between two specified headings. It then prints the extracted text to the console.

```
using TXTextControl.ServerTextControl tx = new TXTextControl.ServerTextControl();
tx.Create();
tx.Load("document.docx", TXTextControl.StreamType.WordprocessingML);

var test = ExtractTextBlocks("Heading 1", tx, true);

foreach (var item in test)
{
	Console.WriteLine("New block: \r\n\r\n" + item + "\r\n");
}
```

The result is a list of three items containing the text between all headings named *Heading 1*.

```
New block:

This is the text of heading 1.

This is more text of heading 1.

This is the text of heading 1.

Sub-Heading 1

Normal text.

Normal text 2.

Sub-Heading 2

New block:

This is the text of heading 2.

This is more text of heading 2.

New block:

This is the text of heading 3.
```

If we now want to extract only the text between the *Heading 2* styles, without adding the rest of the text that doesn't contain a closing style name, we can use the following code:

```
using TXTextControl.ServerTextControl tx = new TXTextControl.ServerTextControl();
tx.Create();
tx.Load("document.docx", TXTextControl.StreamType.WordprocessingML);

var test = ExtractTextBlocks("Heading 2", tx, false);

foreach (var item in test)
{
	Console.WriteLine("New block: \r\n\r\n" + item + "\r\n");
}
```

The following screenshot shows the extracted text between the *Heading 2* styles:

![Extracting text with TX Text Control](https://s1-www.textcontrol.com/assets/dist/blog/2024/05/31/a/assets/extract2.webp "Extracting text with TX Text Control")

The result of the above code snippet is a block of text between the *Heading 2* styles.

```
New block:

Normal text.

Normal text 2.
```

### Conclusion

TX Text Control provides a powerful API to extract text from DOCX and DOC files. You can extract the complete text or just a specific range of text between two specific text positions. This article showed how to extract plain text from DOCX and DOC files using TX Text Control in C#.

---

## About Bjoern Meyer

As CEO, Bjoern is the visionary behind our strategic direction and business development, bridging the gap between our customers and engineering teams. His deep passion for coding and web technologies drives the creation of innovative products. If you're at a tech conference, be sure to stop by our booth - you'll most likely meet Bjoern in person. With an advanced graduate degree (Dipl. Inf.) in Computer Science, specializing in AI, from the University of Bremen, Bjoern brings significant expertise to his role. In his spare time, Bjoern enjoys running, paragliding, mountain biking, and playing the piano.

- [LinkedIn](https://www.linkedin.com/in/bjoernmeyer/)
- [X](https://x.com/txbjoern)
- [GitHub](https://github.com/bjoerntx)

---

## Related Posts

- [Silicon Valley, Here We Come!](https://www.textcontrol.com/blog/2026/08/10/silicon-valley-here-we-come/llms.txt)
- [Against the Trend: Why We Still Believe in Transparent, Perpetual Software Licensing. And Why You Should Too](https://www.textcontrol.com/blog/2026/08/06/against-the-trend-transparent-perpetual-software-licensing/llms.txt)
- [Unlock the Full Value of Your TX Text Control License](https://www.textcontrol.com/blog/2026/08/06/unlock-the-full-value-of-your-tx-text-control-license/llms.txt)
- [Introducing TX Text Control Web Collaboration Preview for ASP.NET Core](https://www.textcontrol.com/blog/2026/08/05/introducing-tx-text-control-web-collaboration-preview-for-asp-net-core-document-editors/llms.txt)
- [Building Long-Term Trust with Digital Signatures and Timestamps in C# .NET](https://www.textcontrol.com/blog/2026/08/04/building-long-term-trust-with-digital-signatures-and-timestamps-in-c-sharp-dot-net/llms.txt)
- [AI Natural Language Document Generation with MCP and TX Text Control .NET](https://www.textcontrol.com/blog/2026/07/16/ai-natural-language-document-generation-with-mcp-server-and-tx-text-control-dotnet/llms.txt)
- [WeAreDevelopers World Congress Europe 2026 Wrap Up: Record Breaking Days in Berlin](https://www.textcontrol.com/blog/2026/07/13/wearedevelopers-world-congress-europe-2026-wrap-up-record-breaking-days-in-berlin/llms.txt)
- [C# Document Generation: A Developer's Guide for .NET](https://www.textcontrol.com/blog/2026/07/08/csharp-document-generation-developer-guide-for-dotnet/llms.txt)
- [Validating PDF/UA Documents in .NET C#: A Practical Guide](https://www.textcontrol.com/blog/2026/07/06/validating-pdf-ua-documents-in-dotnet-csharp/llms.txt)
- [See Text Control at WeAreDevelopers World Congress Europe 2026 in Berlin](https://www.textcontrol.com/blog/2026/07/06/see-text-control-at-wearedevelopers-world-congress-europe-2026-in-berlin/llms.txt)
- [DWX 2026 Wrap-Up: Four Days of Innovation, Conversations, and Enterprise Document Solutions](https://www.textcontrol.com/blog/2026/07/03/dwx-2026-wrap-up-four-days-of-innovation-conversations-and-enterprise-document-solutions/llms.txt)
- [Create SignFabric Envelopes from Mail Merge Templates in .NET C#](https://www.textcontrol.com/blog/2026/06/23/create-signfabric-envelopes-from-mail-merge-templates-using-dotnet-csharp/llms.txt)
- [Convert SSRS RDL Reports to DOCX and TX Text Control Templates in .NET C#](https://www.textcontrol.com/blog/2026/06/22/convert-ssrs-rdl-reports-to-docx-and-tx-text-control-templates-in-dotnet-csharp/llms.txt)
- [Export Document Tables to CSV in .NET C#](https://www.textcontrol.com/blog/2026/06/19/export-document-tables-to-csv-in-dotnet-csharp/llms.txt)
- [Major SignFabric Updates: Stronger Audit Trails, Validation, and Recipient Workflows](https://www.textcontrol.com/blog/2026/06/17/major-signfabric-updates-stronger-audit-trails-validation-and-recipient-workflows/llms.txt)
- [Text Control Expands North American Conference Presence with WeAreDevelopers World Congress North America](https://www.textcontrol.com/blog/2026/06/12/text-control-expands-north-american-conference-presence-with-wearedevelopers-world-congress-north-america/llms.txt)
- [Converting HTML to Markdown in C# .NET](https://www.textcontrol.com/blog/2026/06/11/converting-html-to-markdown-in-csharp-dot-net/llms.txt)
- [Beyond WebSockets: A Glimpse into the Future of Document Editing with WebAssembly](https://www.textcontrol.com/blog/2026/06/10/beyond-websockets-glimpse-future-document-editing-webassembly/llms.txt)
- [Showcasing the Future of Document Processing at Developer World DWX 2026](https://www.textcontrol.com/blog/2026/06/08/showcasing-the-future-of-document-processing-at-dwx-developer-week-2026/llms.txt)
- [PDF Security Explained: Passwords, Permissions, Encryption and Digital Signatures in C# .NET](https://www.textcontrol.com/blog/2026/06/08/pdf-security-explained-passwords-permissions-encryption-and-digital-signatures-in-csharp-dotnet/llms.txt)
- [NDC Copenhagen 2026: Great Days in the Heart of Copenhagen's Developer Community](https://www.textcontrol.com/blog/2026/06/05/ndc-copenhagen-2026-great-days-in-the-heart-of-copenhagens-developer-community/llms.txt)
- [Automatically Mapping TX Text Control Form Fields to JSON Data in .NET C#](https://www.textcontrol.com/blog/2026/06/03/automatically-mapping-tx-text-control-form-fields-to-json-data-in-dotnet-csharp/llms.txt)
- [Getting Started with SignFabric: From Clone to Your First Signature Envelope](https://www.textcontrol.com/blog/2026/06/02/getting-started-with-signfabric-from-clone-to-your-first-signature-envelope/llms.txt)
- [We Never Pause - Join Us at NDC Copenhagen 2026](https://www.textcontrol.com/blog/2026/05/27/we-never-pause-join-us-at-ndc-copenhagen-2026/llms.txt)
- [MD DevDays 2026: Record Attendance, Packed Expo Hall, and Three Great Days in Magdeburg](https://www.textcontrol.com/blog/2026/05/21/md-devdays-2026-record-attendance-packed-expo-hall-and-three-great-days-in-magdeburg/llms.txt)
