0

我有一个包含超过 200K 图像的文件夹。一些图像将遵循以下文件名模式:

5093_1.jpg
5093_2.jpg
5093_3.jpg
5093_4.jpg
5093_5.jpg
5094_1.jpg
5094_2.jpg
5094_3.jpg

我的计划是使用 iTextSharp 将每组图像合并到 PDF 中。当我说一组图像时,下面的那些

5093_1.jpg
    5093_2.jpg
    5093_3.jpg
    5093_4.jpg
    5093_5.jpg

将变为 5093.pdf 和剩余的 5094.pdf。

像下面的东西

iTextSharp.text.Document Doc = new iTextSharp.text.Document(PageSize.LETTER);
                    //Store the document on the desktop 
                    string PDFOutput = Path.Combine(PDFFolder, "PDFs", tmp[0] + "_" + tmp[1].Replace(".jpg", "") + ".pdf");
                    PdfWriter writer = PdfWriter.GetInstance(Doc, new FileStream(PDFOutput, FileMode.Create, FileAccess.Write, FileShare.Read));

                    //Open the PDF for writing 
                    Doc.Open();
                    Doc.NewPage();
                    //Doc.Add(new iTextSharp.text.Jpeg(new Uri(fi.FullName)));

                    Image jpg = Image.GetInstance(new Uri(fi.FullName));
                    jpg.ScaleToFit(700f, 700f);
                    Doc.Add(jpg);

                    Doc.Close();

我对你们的问题是,我是否按顺序找到所有带有 5093 或任何数字的文件,以便我可以循环浏览并将它们拼接为 PDF。

非常感谢您的帮助

4

3 回答 3

1
var path = //your path
var files = Directory.GetFiles(path, "*_*.jpg");
//group only by the bit of the filename before the '_'
var groupedBySamePre_Value = files.GroupBy(p => Path.GetFileNameWithoutExtension(p).Split('_')[0]);
foreach (var group in groupedBySamePre_Value)
{
  //this is a new file group pdf
  foreach (var file in group.OrderBy(p => p))
  {
    //add the file to the pdf
  }
  //end of file group pdf
}
于 2012-06-27T15:02:25.027 回答
0

也许你可以做这样的事情:

Regex regex= new Regex(@"[0-9]+_[0-9].jpg");
var files = Directory.GetFiles(yourPath, "*.jpg").
                  Where(path => regex.IsMatch(path)).ToList();

regex假设以下格式

{at least one number}_{one number}.jpg

应该为你工作。

于 2012-06-27T15:00:30.953 回答
0

使用 Array.Sort 的另一个建议:

DirectoryInfo dirInfo=new DirectoryInfo(imageDirPath);
FileInfo fileInfos = dirInfo.GetFiles(*_*.jpg);
Array.Sort(fileInfos, delegate(FileInfo f1, FileInfo f2) {
    return f1.Name.CompareTo(f2.Name);
});
于 2012-06-27T15:02:23.313 回答