Как преобразовать PDF в PNG в многопоточном режиме на C# и .NET


Полный код

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

namespace Sample
{
    class Sample
    {
        static void Main(string[] args)
        {
            ConvertPdfToPngInThread();
        }
        public class TArgument
        {
            public string PdfFile { get; set; }
            public int PageNumber { get; set; }
        }
        public static void ConvertPdfToPngInThread()
        {
            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) => ConvertToPng(a));
                t.Start(targ);
                threads.Add(t);
            }

            foreach (var thread in threads)
                thread.Join();
            Console.WriteLine("Done!");
        }

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

            string pngFile = Path.GetFileNameWithoutExtension(pdfFile) + ".png";
			
                                  // Get your free 30-day key here:   
			 // https://sautinsoft.com/start-for-free/
			
            SautinSoft.PdfFocus f = new SautinSoft.PdfFocus();

            f.ImageOptions.ImageFormat = PdfFocus.CImageOptions.ImageFormats.Png;
            f.ImageOptions.Dpi = 300;

            f.OpenPdf(pdfFile);

            bool done = false;

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

                if (f.ToImage(pngFile, page) == 0)
                    done = true;
                f.ClosePdf();
            }

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

Download

Option Infer On

Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Collections.Generic
Imports System.Threading
Imports SautinSoft

Namespace Sample
	Friend Class Sample
		Shared Sub Main(ByVal args() As String)
			ConvertPdfToPngInThread()
		End Sub
		Public Class TArgument
			Public Property PdfFile() As String
			Public Property PageNumber() As Integer
		End Class
		Public Shared Sub ConvertPdfToPngInThread()
			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) ConvertToPng(a))
				t.Start(targ)
				threads.Add(t)
			Next i

			For Each thread In threads
				thread.Join()
			Next thread
			Console.WriteLine("Done!")
		End Sub

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

			Dim pngFile As String = Path.GetFileNameWithoutExtension(pdfFile) & ".png"

								  ' Get your free 30-day key here:   
			 ' https://sautinsoft.com/start-for-free/

			Dim f As New SautinSoft.PdfFocus()

			f.ImageOptions.ImageFormat = PdfFocus.CImageOptions.ImageFormats.Png
			f.ImageOptions.Dpi = 300

			f.OpenPdf(pdfFile)

			Dim done As Boolean = False

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

				If f.ToImage(pngFile, page) = 0 Then
					done = True
				End If
				f.ClosePdf()
			End If

			If done Then
				Console.WriteLine("{0}" & vbTab & " - Done!", Path.GetFileName(pdfFile))
				System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(pngFile) With {.UseShellExecute = True})
			Else
				Console.WriteLine("{0}" & vbTab & " - Error!", Path.GetFileName(pdfFile))
			End If
		End Sub
	End Class
End Namespace

Download


Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу [email protected] или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже:



Вопросы и предложения всегда приветствуются!

Мы разрабатываем компоненты .Net с 2002 года. Мы знаем форматы PDF, DOCX, RTF, HTML, XLSX и Images. Если вам нужна помощь в создании, изменении или преобразовании документов в различных форматах, мы можем вам помочь. Мы напишем для вас любой пример кода абсолютно бесплатно.