Primo Chalice Ответов: 1

Как сравнить несколько PDF-файлов и получить PDF с наименьшим количеством страниц в C#?


Я извлекаю список всех файлов .pdf в каталоге, и у меня есть функция, чтобы получить количество страниц для одного pdf-файла.

//List of all PDF files
string[] filePaths = Directory.GetFiles(cboSource.Text, "*.pdf", SearchOption.AllDirectories);
MessageBox.Show(String.Join(Environment.NewLine, filePaths));
    
//Get the number of pages in a PDF file
public int GetNumberOfPdfPages(string fileName)
{
    using (StreamReader sr = new StreamReader(File.OpenRead(fileName)))
    {
    	Regex regex = new Regex(@"/Type\s*/Page[^s]");
    	MatchCollection matches = regex.Matches(sr.ReadToEnd());
    	return matches.Count;
    }
}


Пожалуйста, не обращайте внимания на MessageBox, так как я только что использовал его, чтобы увидеть, являются ли значения правильными.

Теперь я хочу получить имя/путь к тому PDF-файлу, который имеет наименьшее количество страниц в общей коллекции.
string[] filePaths
.

Пожалуйста помочь.

С уважением

Что я уже пробовал:

Я показал все, что я сделал в своем вопросе. Я не пробовал ничего кроме этого, так как не уверен, что и как делать дальше

1 Ответов

Рейтинг:
0

TheRealSteveJudge

Прежде всего: ваш метод подсчета страниц ненадежен.
например, он дал мне 0 для PDF-файла, фактически содержащего более 1000 страниц.

Если у вас когда-то был надежный метод подсчета страниц
вы должны собрать имя файла и количество страниц с помощью такой модели:

public class PdfFileInfo
{
    public string Filename { get; set; }
    public int PageCount { get; set; }
}

напр.
private void GetPdfFiles(string folder)
{
	var pdfFileInfos = new List<PdfFileInfo>();
	
	var filePaths = Directory.GetFiles(folder, "*.pdf", SearchOption.AllDirectories);

	foreach (var filePath in filePaths)
	{
		pdfFileInfos.Add(new PdfFileInfo
		{
			Filename = filePath,
			PageCount = GetNumberOfPdfPages(filePath)
		});
	}

	pdfFileInfos = pdfFileInfos.OrderBy(x => x.PageCount).ToList();

	if (pdfFileInfos.Count > 1)
	{
		var result = pdfFileInfos[0];

		MessageBox.Show($"{result.Filename} has {result.PageCount} pages.");
	}
}