Convert PDF to Word in Multi-thread mode using C# and .NET

This Console Application shows how to convert numerous PDF documents into DOCX using multithread mode. The each conversion will be done in the own thread.

Complete code

using System;
using System.IO;
using System.Collections.Generic;
using System.Threading;
using SautinSoft;

namespace Sample
    class Sample
        static void Main(string[] args)
        public class TArgument
            public string PdfFile { get; set; }
            public int PageNumber { get; set; }
        public static void ConvertPdfToWordInThread()
            string pdfs = Path.GetFullPath(@"..\..\..\");
            string[] files = Directory.GetFiles(pdfs, "*.pdf");

            List<Thread> threads = new List<Thread>();
            for (int i = 0; i < files.Length; i++)
                TArgument targ = new TArgument()
                    PdfFile = files[i],
                    PageNumber = 1

                var t = new Thread((a) => ConvertToWord(a));

            foreach (var thread in threads)

        public static void ConvertToWord(object targ)
            TArgument targum = (TArgument)targ;
            string pdfFile = targum.PdfFile;
            int page = targum.PageNumber;

            string docxFile = Path.GetFileNameWithoutExtension(pdfFile) + ".docx";
                                             // Get your free 30-day key here:   
            SautinSoft.PdfFocus f = new SautinSoft.PdfFocus();

            f.WordOptions.Format = PdfFocus.CWordOptions.eWordDocument.Docx;
            f.WordOptions.RenderMode = PdfFocus.CWordOptions.eRenderMode.Flowing;


            bool done = false;

            if (f.PageCount > 0)
                if (page >= f.PageCount)
                    page = 1;

                if (f.ToWord(docxFile, page, page) == 0)
                    done = true;

            if (done)
                Console.WriteLine("{0}\t - Done!", Path.GetFileName(pdfFile));
                System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(docxFile) { UseShellExecute = true });
                Console.WriteLine("{0}\t - Error!", Path.GetFileName(pdfFile));


Imports System.IO
Imports System.Drawing.Imaging
Imports System.Collections.Generic
Imports System.Threading
Imports SautinSoft

Module Sample

    Sub Main()
    End Sub
    Public Class TArgument
        Public Property PdfFile() As String
        Public Property PageNumber() As Integer
    End Class
    Public Sub ConvertPdfToWordInThread()
        Dim pdfs As String = Path.GetFullPath("..\..\..\")
        Dim files() As String = Directory.GetFiles(pdfs, "*.pdf")

        Dim threads As New List(Of Thread)()
        For i As Integer = 0 To files.Length - 1
            Dim targ As New TArgument() With {
                    .PdfFile = files(i),
                    .PageNumber = 1

            Dim t = New Thread(Sub(a) ConvertToWord(a))
        Next i

        For Each t As Thread In threads
        Next t
    End Sub

    Public Sub ConvertToWord(ByVal targ As Object)
        Dim targum As TArgument = DirectCast(targ, TArgument)
        Dim pdfFile As String = targum.PdfFile
        Dim page As Integer = targum.PageNumber

        Dim docxFile As String = Path.GetFileNameWithoutExtension(pdfFile) + ".docx"
                                ' Get your free 30-day key here: 
        Dim f As New SautinSoft.PdfFocus()

        f.WordOptions.Format = PdfFocus.CWordOptions.eWordDocument.Docx
        f.WordOptions.RenderMode = PdfFocus.CWordOptions.eRenderMode.Flowing


        Dim done As Boolean = False

        If f.PageCount > 0 Then
            If page >= f.PageCount Then
                page = 1
            End If

            If f.ToWord(docxFile, page, page) = 0 Then
                done = True
            End If
        End If

        If done Then
            Console.WriteLine("{0}" & ControlChars.Tab & " - Done!", Path.GetFileName(pdfFile))
            System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(docxFile) With {.UseShellExecute = True})
            Console.WriteLine("{0}" & ControlChars.Tab & " - Error!", Path.GetFileName(pdfFile))
        End If
    End Sub
End Module


If you need a new code example or have a question: email us at or ask at Online Chat (right-bottom corner of this page) or use the Form below:

Questions and suggestions from you are always welcome!

We are developing .Net components since 2002. We know PDF, DOCX, RTF, HTML, XLSX and Images formats. If you need any assistance with creating, modifying or converting documents in various formats, we can help you. We will write any code example for you absolutely free.