private static byte[] Merge(Collection <byte[]> pdfCollection, Document document, string script) { if (pdfCollection == null) { throw new ArgumentNullException("pdfCollection"); } // get a list of readers for the collection of bytes passed in var readers = pdfCollection.Where(b => b != null).Select(b => new PdfReader(b)).ToList(); var totalPages = readers.Sum(r => r.NumberOfPages); byte[] mergedPdf; using (var stream = new MemoryStream()) { var writer = new PdfSmartCopy(document, stream); document.Open(); var currentPage = 1; readers.ForEach(r => { currentPage = Append(writer, r, document, currentPage, totalPages); }); if (!string.IsNullOrEmpty(script)) { var action = PdfAction.JavaScript(script, writer); writer.AddJavaScript(action); } document.Close(); stream.Flush(); mergedPdf = stream.ToArray(); } return(mergedPdf); }