private void Concatenate()
        {
            if (concatTempFile != null)
            {
                return;
            }

            var files = this.fileListBox1.Files;

            if (files.Count < 1)
            {
                throw new Exception("No files are added.");
            }
            string fileName = FileOperation.GetTempFile("", ".pdf");

            tempFSCol.Push(fileName);

            var             outStream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            PdfConcatenator con       = new PdfConcatenator(outStream, encryptInfo, viewerPreference);
            var             readers   = new List <PdfReader>();

            try
            {
                foreach (string filename in files)
                {
                    con.QueryPassword = new PasswordListener(filename).QueryPassword;
                    PdfReader reader = con.CreatePdfReader(filename, concatenatorOption);
                    readers.Add(reader);
                    con.Append(reader, Path.GetFileNameWithoutExtension(filename), new[] { new PageRange(1, int.MaxValue) }, concatenatorOption);
                }
            }
            finally
            {
                con.Close();
                outStream.Close();
                foreach (PdfReader reader in readers)
                {
                    reader.Close();
                }
            }

            concatTempFile = fileName;
        }
        static int Main(string[] args)
        {
            ArrayList argArray = new ArrayList(args.Length);
            int       i;

            try
            {
                for (i = 0; i < args.Length;)
                {
                    string parm = args[i++];

                    if (parm == null)
                    {
                        break;
                    }
                    else if (parm == "/charset")
                    {
                        parm     = args[i++];
                        encoding = Encoding.GetEncoding(parm);
                    }
                    else if (parm == "/?" || parm == "/help")
                    {
                        ShowUsage();
                        return(0);
                    }
                    else
                    {
                        if (parm.Length == 0)
                        {
                            argArray.Add(parm);
                        }
                        else if (parm.Substring(0, 1) == "@")
                        {
                            string       fileName = parm.Substring(1);
                            StreamReader reader   = new StreamReader(fileName, encoding);
                            string       opt      = reader.ReadToEnd();
                            string[]     opts     = opt.Split('\n');
                            for (int j = 0; j < opts.Length; j++)
                            {
                                string o = opts[j].Trim();
                                if (!(o == ""))
                                {
                                    argArray.Add(o);
                                }
                            }
                        }
                        else
                        {
                            argArray.Add(parm);
                        }
                    }
                }                 /*GetOptLoop*/

                args = new string[argArray.Count];
                for (i = 0; i < argArray.Count; i++)
                {
                    args[i] = (string)argArray[i];
                }

                Stream concatenatedFileStream = null;

                for (i = 0; i < args.Length;)
                {
                    string parm = args[i++];

                    if (false)
                    {
                    }
                    else if (parm == "/outfile")
                    {
                        string s = args[i++];
                        if (s == "-")
                        {
                            concatenatedFileStream = System.Console.OpenStandardOutput();
                        }
                        else
                        {
                            concatenatedFileStream = new FileStream(Path.GetFullPath(s), FileMode.Create, FileAccess.Write);
                        }
                    }
                    else if (parm == "/security")
                    {
                        string len       = args[i++];
                        string userPass  = args[i++];
                        string ownerPass = args[i++];
                        encryptInfo = new PdfEncryptInfo(int.Parse(len), userPass, ownerPass, 0);
                        for (; i < args.Length; i++)
                        {
                            string p = args[i].ToLower();
                            if (false)
                            {
                            }
                            else if (p == "printing")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowPrinting;
                            }
                            else if (p == "modify-contents")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowModifyContents;
                            }
                            else if (p == "copy")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowCopy;
                            }
                            else if (p == "modify-annotations")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowModifyAnnotations;
                            }
                            else if (p == "fill-in")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowFillIn;
                            }
                            else if (p == "screen-readers")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowScreenReaders;
                            }
                            else if (p == "assembly")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowAssembly;
                            }
                            else if (p == "degraded-printing")
                            {
                                encryptInfo.permissions |= PdfWriter.AllowDegradedPrinting;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    else if (parm == "/viewer")
                    {
                        for (; i < args.Length; i++)
                        {
                            string p = args[i].ToLower();
                            if (false)
                            {
                            }
                            else if (p == "page-layout-single-page")
                            {
                                viewerPreference |= PdfWriter.PageLayoutSinglePage;                                                                  //Display one page at a time.
                            }
                            else if (p == "page-layout-continuous")
                            {
                                viewerPreference |= PdfWriter.PageLayoutOneColumn;                                                                 // Display the pages in one column.
                            }
                            else if (p == "page-layout-continuous-facing-left")
                            {
                                viewerPreference |= PdfWriter.PageLayoutTwoColumnLeft;                                                                             //Display the pages in two columns, with oddnumbered pages on the left.
                            }
                            else if (p == "page-layout-continuous-facing" || p == "page-layout-continuous-facing-right")
                            {
                                viewerPreference |= PdfWriter.PageLayoutTwoColumnRight;                                                                                                                      //Display the pages in two columns, with oddnumbered pages on the right.
                            }
                            else if (p == "page-mode-use-none")
                            {
                                viewerPreference |= PdfWriter.PageModeUseNone;                                                             // Neither document outline nor thumbnail images visible.
                            }
                            else if (p == "page-mode-use-outlines")
                            {
                                viewerPreference |= PdfWriter.PageModeUseOutlines;                                                                 // Document outline visible.
                            }
                            else if (p == "page-mode-use-thumbs")
                            {
                                viewerPreference |= PdfWriter.PageModeUseThumbs;                                                               // Thumbnail images visible.
                            }
                            else if (p == "page-mode-full-screen")
                            {
                                viewerPreference |= PdfWriter.PageModeFullScreen;                                                                // Full-screen mode, with no menu bar, window  controls, or any other window visible.
                            }
                            else if (p == "hide-toolbar")
                            {
                                viewerPreference |= PdfWriter.HideToolbar;                                                       // A flag specifying whether to hide the viewer application's toolbars when the document is active.
                            }
                            else if (p == "hide-menubar")
                            {
                                viewerPreference |= PdfWriter.HideMenubar;                                                       // A flag specifying whether to hide the viewer application's menu bar when the document is active.
                            }
                            else if (p == "hide-window-ui")
                            {
                                viewerPreference |= PdfWriter.HideWindowUI;                                                         // A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed.
                            }
                            else if (p == "fit-window")
                            {
                                viewerPreference |= PdfWriter.FitWindow;                                                     // A flag specifying whether to resize the document's window to fit the size of the first displayed page.
                            }
                            else if (p == "center-window" || p == "centre-window")
                            {
                                viewerPreference |= PdfWriter.CenterWindow;                                                                                // A flag specifying whether to position the document's window in the center of the screen.
                            }
                            else
                            {
                                break;
                            }
                        }
                        if ((viewerPreference & PdfWriter.PageModeFullScreen) != 0)
                        {
                            if ((viewerPreference & PdfWriter.PageModeUseNone) != 0)
                            {
                                viewerPreference |= PdfWriter.NonFullScreenPageModeUseNone;                                                                                  // Neither document outline nor thumbnail images visible.
                            }
                            if ((viewerPreference & PdfWriter.PageModeUseOutlines) != 0)
                            {
                                viewerPreference |= PdfWriter.NonFullScreenPageModeUseOutlines;                                                                                      // Document outline visible.
                            }
                            if ((viewerPreference & PdfWriter.PageModeUseThumbs) != 0)
                            {
                                viewerPreference |= PdfWriter.NonFullScreenPageModeUseThumbs;                                                                                    // Thumbnail images visible.
                            }
                        }
                    }
                    else if (parm == "/add-outlines")
                    {
                        appendOption.AddOutlines = true;
                    }
                    else if (parm == "/fitting")
                    {
                        string s = args[i++];
                        if (false)
                        {
                        }
                        else if (s.Equals("XYZ"))
                        {
                            s = "/" + s + " null null null";
                        }
                        else if (s.Equals("Fit") || s.Equals("FitB"))
                        {
                            s = "/" + s;
                        }
                        else if (s.Equals("FitH") || s.Equals("FitV") || s.Equals("FitBH") || s.Equals("FitBV"))
                        {
                            s = "/" + s + " null";
                        }
                        else if (s.Equals("FitR"))
                        {
                            s = "/" + s + " null null null null";
                        }
                        else
                        if (s[0] != '/')
                        {
                            s = "/" + s;
                        }
                        appendOption.FittingStyle = s;
                    }
                    else if (parm == "/copy-outlines")
                    {
                        appendOption.CopyOutlines = true;
                    }
                    else
                    {
                        if (concatenatedFileStream == null)
                        {
                            throw new Exception("Missing outfile.");
                        }
                        PdfConcatenator con     = new PdfConcatenator(concatenatedFileStream, encryptInfo, viewerPreference);
                        var             readers = new List <PdfReader>();
                        try
                        {
                            --i;
                            int fileCount = args.Length - i;
                            for (int j = 0; j < fileCount; j++)
                            {
                                PageRange[] pageRanges = null;
                                string      fileName   = args[i + j].Trim();

                                int cp = fileName.LastIndexOf('#');
                                if (cp >= 0)
                                {
                                    string pageRange = fileName.Substring(cp + 1).Trim();
                                    fileName = fileName.Substring(0, cp).Trim();

                                    char[] spt = new char[1];
                                    spt[0] = ',';
                                    string[] ranges = pageRange.Split(spt);
                                    pageRanges = new PageRange[ranges.Length];

                                    for (int k = 0; k < ranges.Length; k++)
                                    {
                                        string pageSpec  = ranges[k];
                                        int    start     = 1;
                                        int    end       = int.MaxValue;
                                        int    indxedOfH = pageSpec.IndexOf('-');
                                        if (indxedOfH < 0)
                                        {
                                            start = end = IntXParse(pageSpec);
                                        }
                                        else
                                        {
                                            string begin = pageSpec.Substring(0, indxedOfH).Trim();
                                            string last  = pageSpec.Substring(indxedOfH + 1).Trim();
                                            if (begin != "")
                                            {
                                                start = IntXParse(begin);
                                            }
                                            if (last != "")
                                            {
                                                end = IntXParse(last);
                                            }
                                        }
                                        pageRanges[k] = new PageRange(start, end);
                                    }
                                }
                                PdfReader reader = con.CreatePdfReader(fileName, appendOption);
                                readers.Add(reader);
                                con.Append(reader, Path.GetFileNameWithoutExtension(fileName), pageRanges, appendOption);
                            }
                        }
                        finally
                        {
                            con.Close();
                            concatenatedFileStream.Close();
                            foreach (PdfReader reader in readers)
                            {
                                reader.Close();
                            }
                        }
                        return(0);
                    }
                }
            }
            catch (Exception ee)
            {
                Console.Write(ee.Message);
                System.Diagnostics.Debug.WriteLine(ee.StackTrace);
                return(1);
            }

            //no imput files.
            Console.Write(CommandLineExample + "\n" + "\"ConcatPDF /help\" for details.\n");
            return(0);
        }