Как сравнить несколько файлов PDF и получить PDF с наименьшим количеством страниц в C #? - PullRequest
0 голосов
/ 11 апреля 2019

Я получаю список всех 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.

Пожалуйста, помогите.

Привет

Ответы [ 4 ]

1 голос
/ 11 апреля 2019

Вы можете получить количество страниц, таких как:

PdfReader pdfReader = new PdfReader("<path>");
int numberOfPages = pdfReader.NumberOfPages;

добавить количество страниц для каждого pdf в массив, а затем

array.Min();

или

Dictionary<PdfReader , int> pdfs= new Dictionary<PdfReader , int>();

и чем получить этот pdf по наименьшему количеству страниц

pdfs.MinBy(x=> x.Value).Key;
0 голосов
/ 11 апреля 2019

вы должны собрать имя файла и количество страниц, используя такую ​​модель:

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.");
    }
}
0 голосов
/ 11 апреля 2019

ваша функция GetNumberOfPdfPages не работает. Найдите другой способ подсчета количества страниц. Хорошо. Предположим, это работает, вы можете сделать следующее

        //List of all PDF files
        string[] filePaths = Directory.GetFiles(cboSource.Text, "*.pdf", SearchOption.AllDirectories);
        MessageBox.Show(String.Join(Environment.NewLine, filePaths));

        string finalFile = string.Empty;
        int pages = int.MaxValue;
        foreach(var file in filePaths)
        {
            int currentPages = GetNumberOfPdfPages(file);
            if(currentPages < pages )
            {
                finalFile = file;
            }
        }
0 голосов
/ 11 апреля 2019
static void Main(string[] args)
{
        string[] filePaths = Directory.GetFiles("{Directory_Path}", "*.pdf", SearchOption.AllDirectories);
        int noOfPages = 0;
        string filePath = "";
        for(int i= 0;i < filePaths.Length;i++)
        {
            int tmp = GetNumberOfPdfPages(filePaths[i]);
            if(i==0)
            {
                noOfPages = tmp;
                filePath = filePaths[i];
            }
            else
            {
                if(tmp > noOfPages)
                {
                    noOfPages = tmp;
                    filePath = filePaths[i];
                }
            }
        }
}
public static int GetNumberOfPdfPages(string fileName)
{
        PdfReader pdfReader = new PdfReader(fileName); // use iTextSharp for PdfReader class.
        int numberOfPages = pdfReader.NumberOfPages;
        return numberOfPages;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...