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 に答える