// ---------------------------------------------------------------------------      
 public void Write(Stream stream)
 {
     using (ZipFile zip = new ZipFile())
     {
         MovieTemplates m = new MovieTemplates();
         byte[] pdf = Utility.PdfBytes(m);
         BookmarkedTimeTable b = new BookmarkedTimeTable();
         byte[] bttBytes = b.ManipulatePdf(pdf);
         MovieHistory mh = new MovieHistory();
         byte[] mhBytes = Utility.PdfBytes(mh);
         List<byte[]> src = new List<byte[]>() { bttBytes, mhBytes };
         ConcatenateBookmarks cb = new ConcatenateBookmarks();
         zip.AddEntry(RESULT, cb.ManipulatePdf(src));
         zip.AddEntry(Utility.ResultFileName(b.ToString() + ".pdf"), bttBytes);
         zip.AddEntry(Utility.ResultFileName(mh.ToString() + ".pdf"), mhBytes);
         zip.Save(stream);
     }
 }
 // ---------------------------------------------------------------------------
 public void Write(Stream stream)
 {
     MovieLinks1 ml = new MovieLinks1();
     MovieHistory mh = new MovieHistory();
     List<byte[]> pdf = new List<byte[]>() 
     {
         Utility.PdfBytes(ml),
         Utility.PdfBytes(mh)
     };
     string[] names = { ml.ToString(), mh.ToString() };
     using (ZipFile zip = new ZipFile())
     {
         using (MemoryStream ms = new MemoryStream())
         {
             // step 1
             using (Document document = new Document())
             {
                 // step 2
                 using (PdfCopy copy = new PdfCopy(document, ms))
                 {
                     // step 3
                     document.Open();
                     // step 4
                     for (int i = 0; i < pdf.Count; ++i)
                     {
                         zip.AddEntry(Utility.ResultFileName(names[i] + ".pdf"), pdf[i]);
                         PdfReader reader = new PdfReader(pdf[i]);
                         // loop over the pages in that document
                         int n = reader.NumberOfPages;
                         for (int page = 0; page < n; )
                         {
                             copy.AddPage(copy.GetImportedPage(reader, ++page));
                         }
                         copy.FreeReader(reader);
                         reader.Close();
                     }
                 }
             }
             zip.AddEntry(RESULT, ms.ToArray());
         }
         zip.Save(stream);
     }
 }
        // ---------------------------------------------------------------------------    
        public void Write(Stream stream)
        {
            using (ZipFile zip = new ZipFile())
            {
                MovieLinks1 ml = new MovieLinks1();
                byte[] r1 = Utility.PdfBytes(ml);
                MovieHistory mh = new MovieHistory();
                byte[] r2 = Utility.PdfBytes(mh);
                using (MemoryStream ms = new MemoryStream())
                {
                    // step 1
                    using (Document document = new Document())
                    {
                        // step 2
                        using (PdfCopy copy = new PdfCopy(document, ms))
                        {
                            // step 3
                            document.Open();
                            // step 4
                            // reader for document 1
                            PdfReader reader1 = new PdfReader(r1);
                            int n1 = reader1.NumberOfPages;
                            // reader for document 2
                            PdfReader reader2 = new PdfReader(r2);
                            int n2 = reader2.NumberOfPages;
                            // initializations
                            PdfImportedPage page;
                            PdfCopy.PageStamp stamp;
                            // Loop over the pages of document 1
                            for (int i = 0; i < n1; )
                            {
                                page = copy.GetImportedPage(reader1, ++i);
                                stamp = copy.CreatePageStamp(page);
                                // add page numbers
                                ColumnText.ShowTextAligned(
                                  stamp.GetUnderContent(), Element.ALIGN_CENTER,
                                  new Phrase(string.Format("page {0} of {1}", i, n1 + n2)),
                                  297.5f, 28, 0
                                );
                                stamp.AlterContents();
                                copy.AddPage(page);
                            }

                            // Loop over the pages of document 2
                            for (int i = 0; i < n2; )
                            {
                                page = copy.GetImportedPage(reader2, ++i);
                                stamp = copy.CreatePageStamp(page);
                                // add page numbers
                                ColumnText.ShowTextAligned(
                                  stamp.GetUnderContent(), Element.ALIGN_CENTER,
                                  new Phrase(string.Format("page {0} of {1}", n1 + i, n1 + n2)),
                                  297.5f, 28, 0
                                );
                                stamp.AlterContents();
                                copy.AddPage(page);
                            }
                            reader1.Close();
                            reader2.Close();
                        }
                    }
                    zip.AddEntry(RESULT, ms.ToArray());
                    zip.AddEntry(Utility.ResultFileName(ml.ToString() + ".pdf"), r1);
                    zip.AddEntry(Utility.ResultFileName(mh.ToString() + ".pdf"), r2);
                }
                zip.Save(stream);
            }
        }