简体   繁体   中英

add jpeg to pdf in correct order c# itextsharp

Good Afternoon All,

I'm trying to combine all jpegs in a folder into a pdf . In the folder they are numbered as follows "Filename_0", "FileName_1" , "FileName_2" etc. However when I add them using a foreach file in folder they end up in the wrong order, ie 0,1,10,11 etc. These are pages of a document so the order is important. Any idea if there's a way to specify the order in the foreach loop?

using (var stream = new FileStream(PDFName, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                PdfWriter writer = PdfWriter.GetInstance(document, stream);
                writer.SetFullCompression();
                document.Open();

                foreach (var files in d.GetFiles("*.jpg"))
                {
                    using (var imageStream = new FileStream(files.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        Image image = Image.GetInstance(imageStream);
                        image.ScaleToFit(PageSize.A4);
                        document.NewPage();
                        document.Add(image);

                    }


            }
            document.Close();

Quick-and-dirty ( edit : I forgot about the extension):

var filesInOrder = d.GetFiles("*.jpg").OrderBy(PageNumber);

foreach (var file in filesInOrder)
{
    ...
}

private static int PageNumber(string filename)
{
    var underscore = filename.IndexOf('_');
    var extension = filename.LastIndexOf('.');
    var number = filename.Substring(underscore + 1, extension - underscore - 1);
    return int.Parse(number);
}

I've managed to solve my problem in a slightly different way. I was originally converting multipage tiffs to jpegs to reduce the size, i figured out that I could order the jpegs by creation date as its all done just prior to this code executing and created in the correct order. Here's what I used in case its of any use to anyone.

 using (var stream = new FileStream(PDFName, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                PdfWriter writer = PdfWriter.GetInstance(document, stream);
                writer.SetFullCompression();
                document.Open();

            FileSystemInfo[] filez = d.GetFileSystemInfos();
            var filesInOrder = filez.OrderBy(f => f.CreationTime);


            foreach (var files in filesInOrder)
                {
                    using (var imageStream = new FileStream(files.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        Image image = Image.GetInstance(imageStream);
                        image.ScaleToFit(PageSize.A4);
                        document.NewPage();
                        document.Add(image);

                    }
            }
            document.Close();
        } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM