Convert PDF to XML in Multi-thread mode using C# and .NET
The application shows how to convert several PDF documents into XML files 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)
        {
            // Before starting, we recommend to get a free key:
            // https://sautinsoft.com/start-for-free/
            
            // Apply the key here:
            // SautinSoft.PdfFocus.SetLicense("...");
			
            ConvertPdfToXmlInThread();
        }
        public class TArgument
        {
            public string PdfFile { get; set; }
            public int PageNumber { get; set; }
        }
        public static void ConvertPdfToXmlInThread()
        {
            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) => ConvertToXml(a));
                t.Start(targ);
                threads.Add(t);
            }
            foreach (var thread in threads)
                thread.Join();
            Console.WriteLine("Done!");
        }
        public static void ConvertToXml(object targ)
        {
            TArgument targum = (TArgument)targ;
            string pdfFile = targum.PdfFile;
            int page = targum.PageNumber;
            string xmlFile = Path.GetFileNameWithoutExtension(pdfFile) + ".xml";
			
            SautinSoft.PdfFocus f = new SautinSoft.PdfFocus();
            f.OpenPdf(pdfFile);
            bool done = false;
            if (f.PageCount > 0)
            {
                if (page >= f.PageCount)
                    page = 1;
                if (f.ToXml(xmlFile, page, page) == 0)
                    done = true;
                f.ClosePdf();
            }
            if (done)
            {
                Console.WriteLine("{0}\t - Done!", Path.GetFileName(pdfFile));
                System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(xmlFile) { UseShellExecute = true });
            }
            else
                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()
		' Before starting, we recommend to get a free key:
		' https://sautinsoft.com/start-for-free/
		' Apply the key here
		' SautinSoft.PdfFocus.SetLicense("...");
        ConvertPdfToXmlInThread()
    End Sub
    Public Class TArgument
        Public Property PdfFile() As String
        Public Property PageNumber() As Integer
    End Class
    Public Sub ConvertPdfToXmlInThread()
        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) ConvertToXml(a))
            t.Start(targ)
            threads.Add(t)
        Next i
        For Each t As Thread In threads
            t.Join()
        Next t
            Console.WriteLine("Done!")
		End Sub
    Public Sub ConvertToXml(ByVal targ As Object)
        Dim targum As TArgument = DirectCast(targ, TArgument)
        Dim pdfFile As String = targum.PdfFile
        Dim page As Integer = targum.PageNumber
        Dim xmlFile As String = Path.GetFileNameWithoutExtension(pdfFile) + ".xml"
		
        Dim f As New SautinSoft.PdfFocus()
        f.OpenPdf(pdfFile)
        Dim done As Boolean = False
        If f.PageCount > 0 Then
            If page >= f.PageCount Then
                page = 1
            End If
            If f.ToXml(xmlFile, page, page) = 0 Then
                done = True
            End If
            f.ClosePdf()
        End If
        If done Then
            Console.WriteLine("{0}" & ControlChars.Tab & " - Done!", Path.GetFileName(pdfFile))
            System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(xmlFile) With {.UseShellExecute = True})
        Else
            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 support@sautinsoft.com or ask at Online Chat (right-bottom corner of this page) or use the Form below: