Преобразование PDF в XML в многопоточном режиме на C# и .NET
Приложение показывает, как преобразовать несколько документов PDF в файлы XML в многопоточном режиме. Каждое преобразование будет выполняться в отдельном потоке.
Полный код
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading;
using SautinSoft;
namespace Sample
{
class Sample
{
static void Main(string[] args)
{
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";
// Get your free 30-day key here:
// https://sautinsoft.com/start-for-free/
SautinSoft.PdfFocus f = new SautinSoft.PdfFocus();
// Let's convert all data (textual and tabular) to XML.
f.XmlOptions.ConvertNonTabularDataToSpreadsheet = true;
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()
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"
' Get your free 30-day key here:
' https://sautinsoft.com/start-for-free/
Dim f As New SautinSoft.PdfFocus()
' Let's convert all data (textual and tabular) to XML.
f.XmlOptions.ConvertNonTabularDataToSpreadsheet = True
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
Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу [email protected] или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже: