private System.IO.MemoryStream imposeTypesetPerfectBindCover(System.IO.MemoryStream orig_stream)
        {
            System.IO.MemoryStream dest_stream = null;
            try
            {
                dest_stream = new System.IO.MemoryStream();

                var docB4  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1031.76f, 728.64f));
                var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB4, dest_stream);
                docB4.Open();

                var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray());
                iTextSharp.text.pdf.PdfContentByte contentbyte;

                docB4.Add(new iTextSharp.text.Chunk());
                iTextSharp.text.pdf.PdfTemplate tCover = writer.GetImportedPage(reader, 1);
                contentbyte = writer.DirectContent;

                // default values: in PB briefs, y_coordinate will not vary
                float x_coordinate = 575.5f, y_coordinate = -76.5f;

                switch (LengthOfCover)
                {
                default:
                case 48:     // GOOD: TESTED 11/16/15
                    y_coordinate = -88.5f;
                    break;

                case 49:     // STILL AN ESTIMATE
                    y_coordinate = -82.5f;
                    break;

                case 50:     // GOOD: TESTED 11/16/15
                    y_coordinate = -76.5f;
                    break;

                case 51:     // GOOD: TESTED 11/16/15
                    y_coordinate = -70.5f;
                    break;
                }
                contentbyte.AddTemplate(tCover, x_coordinate, y_coordinate);

                docB4.Close();
                reader.Close();
                writer.Close();
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt);
            }
            return(dest_stream);
        }
        public static bool PerfectBind_LayoutCroppedBrief(string src)
        {
            string dest = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(src), "pb on B5.pdf");

            try
            {
                using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create))
                {
                    iTextSharp.text.Document      docB5  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(515.76f, 728.4f)); // B5 sized page
                    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB5, stream);
                    docB5.Open();

                    iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src);

                    for (int i = 1; i <= reader.NumberOfPages; i++)
                    {
                        if (i != 1)
                        {
                            docB5.NewPage();
                        }
                        docB5.Add(new iTextSharp.text.Chunk());

                        iTextSharp.text.pdf.PdfTemplate t = writer.GetImportedPage(reader, i);

                        iTextSharp.text.pdf.PdfContentByte contentbyte = writer.DirectContent;

                        // MEASUREMENTS GOOD: TESTED 11/16/2015
                        if (i % 2 == 1)
                        {
                            contentbyte.AddTemplate(t, /*42.5f*/ 35.5f, -141.75f); // position for front side of B5 sheet
                        }
                        else if (i % 2 == 0)
                        {
                            contentbyte.AddTemplate(t, /*110f*/ 110f, -141.75f); // position for back side of B5 sheet
                        }
                        else
                        {
                            throw new Exception();
                        }
                    }
                    docB5.Close();
                    reader.Close();
                }
                System.IO.File.Delete(src);
                System.IO.File.Move(dest, src);
                return(true);
            }
            catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); }
        }
        private System.IO.MemoryStream imposeTypesetPerfectBindBrief(System.IO.MemoryStream orig_stream)
        {
            System.IO.MemoryStream dest_stream = null;
            try
            {
                dest_stream = new System.IO.MemoryStream();
                var docB5  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(515.76f, 728.4f));
                var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB5, dest_stream);
                docB5.Open();
                var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray());

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    if (i != 1)
                    {
                        docB5.NewPage();
                    }
                    docB5.Add(new iTextSharp.text.Chunk());

                    iTextSharp.text.pdf.PdfTemplate t = writer.GetImportedPage(reader, i);

                    iTextSharp.text.pdf.PdfContentByte contentbyte = writer.DirectContent;

                    // MEASUREMENTS GOOD: TESTED 11/16/2015
                    if (i % 2 == 1)
                    {
                        contentbyte.AddTemplate(t, /*42.5f*/ 35.5f, -141.75f); // position for front side of B5 sheet
                    }
                    else if (i % 2 == 0)
                    {
                        contentbyte.AddTemplate(t, /*110f*/ 110f, -141.75f); // position for back side of B5 sheet
                    }
                }
                docB5.Close();
                reader.Close();
                writer.Close();
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt);
            }
            return(dest_stream);
        }
        public static bool SaddleStitch_LayoutCroppedBrief(string src)
        {
            string dest = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(src), "ss on B4.pdf");

            try
            {
                using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create))
                {
                    iTextSharp.text.Document      docB4  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1031.76f, 728.64f)); // B4 sized page
                    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB4, stream);
                    docB4.Open();

                    iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src);

                    for (int i = 1; i <= reader.NumberOfPages; i += 2)
                    {
                        if (i != 1)
                        {
                            docB4.NewPage();
                        }
                        docB4.Add(new iTextSharp.text.Chunk());

                        iTextSharp.text.pdf.PdfTemplate tLeft  = writer.GetImportedPage(reader, i);
                        iTextSharp.text.pdf.PdfTemplate tRight = writer.GetImportedPage(reader, i + 1);

                        iTextSharp.text.pdf.PdfContentByte contentbyte = writer.DirectContent;

                        // MEASUREMENTS GOOD: TESTED 11/16/2015; RETESTED TO MATCH 951s, 11/17/2015
                        // RETESTED AGAIN FOR 951A, where most saddle stitches will print
                        contentbyte.AddTemplate(tLeft, /*113f*/ 108f /*110f*/, -126f);        // position for left side of B4 sheet
                        contentbyte.AddTemplate(tRight, /*554.5f*/ /*550.5f*/ 554.5f, -126f); // position for right side of B4 sheet
                    }
                    docB4.Close();
                    reader.Close();
                }
                System.IO.File.Delete(src);
                System.IO.File.Move(dest, src);
                return(true);
            }
            catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); }
        }
        private System.IO.MemoryStream imposeTypesetSaddleStitchBrief(System.IO.MemoryStream orig_stream)
        {
            System.IO.MemoryStream dest_stream = null;
            try
            {
                dest_stream = new System.IO.MemoryStream();

                var docB4  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1031.76f, 728.64f)); // B4 sized page
                var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB4, dest_stream);
                docB4.Open();

                var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray());

                for (int i = 1; i <= reader.NumberOfPages; i += 2)
                {
                    if (i != 1)
                    {
                        docB4.NewPage();
                    }
                    docB4.Add(new iTextSharp.text.Chunk());

                    iTextSharp.text.pdf.PdfTemplate tLeft  = writer.GetImportedPage(reader, i);
                    iTextSharp.text.pdf.PdfTemplate tRight = writer.GetImportedPage(reader, i + 1);

                    iTextSharp.text.pdf.PdfContentByte contentbyte = writer.DirectContent;

                    // MEASUREMENTS GOOD: TESTED 11/16/2015; RETESTED TO MATCH 951s, 11/17/2015
                    // RETESTED AGAIN FOR 951A, where most saddle stitches will print
                    contentbyte.AddTemplate(tLeft, /*113f*/ 108f /*110f*/, -126f);        // position for left side of B4 sheet
                    contentbyte.AddTemplate(tRight, /*554.5f*/ /*550.5f*/ 554.5f, -126f); // position for right side of B4 sheet
                }
                docB4.Close();
                reader.Close();
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt);
            }
            return(dest_stream);
        }
        private System.IO.MemoryStream imposeTypesetSaddleStitchCover(System.IO.MemoryStream orig_stream)
        {
            System.IO.MemoryStream dest_stream = null;
            try
            {
                dest_stream = new System.IO.MemoryStream();

                var docB4  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1031.76f, 728.64f));
                var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB4, dest_stream);
                docB4.Open();

                var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray());
                iTextSharp.text.pdf.PdfContentByte contentbyte;

                docB4.Add(new iTextSharp.text.Chunk());
                iTextSharp.text.pdf.PdfTemplate tCover = writer.GetImportedPage(reader, 1);
                contentbyte = writer.DirectContent;

                // default values
                float x_coordinate = /*550f*/ 554.5f /*17-32 pages*/, y_coordinate = -76.25f /*48 pica*/;

                switch (reader.NumberOfPages - 1 / 16)
                {
                case 0:                  //(01 - 16)
                    x_coordinate = 551f; // NOT SURE ABOUT THIS ONE
                    break;

                default:
                case 1:                    //(17 - 32)
                    x_coordinate = 554.5f; // GOOD
                    break;

                case 2:                  //(33 - 48)
                    x_coordinate = 558f; // TESTED ON 951A, 11/17/2015
                    break;

                case 3:                             //(49 - 64)
                    x_coordinate = /*558f*/ 561.5f; // GOOD
                    break;

                case 4:     //(65 - 80)
                    x_coordinate = /*562f*/ 564f;
                    break;
                }

                switch (LengthOfCover)
                {
                default:
                case 48:
                    y_coordinate = -76.25f;     // GOOD
                    break;

                case 49:
                    y_coordinate = -70.5f;
                    break;

                case 50:
                    y_coordinate = -64.5f;
                    break;

                case 51:
                    y_coordinate = -58.5f;     // GOOD
                    break;
                }

                contentbyte.AddTemplate(tCover, x_coordinate, y_coordinate);

                docB4.Close();
                reader.Close();
                writer.Close();
            }
            catch (Exception excpt)
            {
                System.Diagnostics.Debug.WriteLine(excpt);
            }
            return(dest_stream);
        }
        public static bool SaddleStitch_LayoutCroppedCoverAndInsideCover(string src, int?page_count, int?cover_length)
        {
            string dest = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(src), "ss Cover on B4.pdf");

            try
            {
                using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create))
                {
                    iTextSharp.text.Document      docB4  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1031.76f, 728.64f)); // B4 sized page
                    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB4, stream);
                    docB4.Open();

                    iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src);

                    for (int i = 1; i <= reader.NumberOfPages; i++)
                    {
                        iTextSharp.text.pdf.PdfContentByte contentbyte;
                        if (i == 1)
                        {
                            docB4.Add(new iTextSharp.text.Chunk());
                            iTextSharp.text.pdf.PdfTemplate tCover = writer.GetImportedPage(reader, i);
                            contentbyte = writer.DirectContent;
                            // basic positioning: need to account for page size in future

                            // default values
                            float x_coordinate = /*550f*/ 554.5f /*17-32 pages*/, y_coordinate = -76.25f /*48 pica*/;

                            switch (page_count - 1 / 16)
                            {
                            case 0:                  //(01 - 16)
                                x_coordinate = 551f; // NOT SURE ABOUT THIS ONE
                                break;

                            default:
                            case 1:                    //(17 - 32)
                                x_coordinate = 554.5f; // GOOD
                                break;

                            case 2:                  //(33 - 48)
                                x_coordinate = 558f; // TESTED ON 951A, 11/17/2015
                                break;

                            case 3:                             //(49 - 64)
                                x_coordinate = /*558f*/ 561.5f; // GOOD
                                break;

                            case 4:     //(65 - 80)
                                x_coordinate = /*562f*/ 564f;
                                break;
                            }

                            switch (cover_length)
                            {
                            default:
                            case 48:
                                y_coordinate = -76.25f;     // GOOD
                                break;

                            case 49:
                                y_coordinate = -70.5f;
                                break;

                            case 50:
                                y_coordinate = -64.5f;
                                break;

                            case 51:
                                y_coordinate = -58.5f;     // GOOD
                                break;
                            }

                            contentbyte.AddTemplate(tCover, x_coordinate, y_coordinate);
                        }
                        if (i == 2)
                        {
                            // not set up for multiple inside cover pages yet !!!
                            docB4.NewPage();
                            docB4.Add(new iTextSharp.text.Chunk());
                            iTextSharp.text.pdf.PdfTemplate tInsideCover = writer.GetImportedPage(reader, i);
                            contentbyte = writer.DirectContent;
                            contentbyte.AddTemplate(tInsideCover, 113f, -126f);
                        }
                    }
                    docB4.Close();
                    reader.Close();
                    writer.Close();
                }
                System.IO.File.Delete(src);
                System.IO.File.Move(dest, src);
                return(true);
            }
            catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); }
        }
        public static bool PerfectBind_LayoutCroppedCoverAndInsideCover(string src, int?cover_length)
        {
            string dest = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(src), "pb Cover on B4.pdf");

            try
            {
                using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create))
                {
                    iTextSharp.text.Document      docB4  = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(1031.76f, 728.64f)); // B4 sized page
                    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(docB4, stream);
                    docB4.Open();

                    iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src);

                    for (int i = 1; i <= reader.NumberOfPages; i++)
                    {
                        iTextSharp.text.pdf.PdfContentByte contentbyte;
                        if (i == 1)
                        {
                            docB4.Add(new iTextSharp.text.Chunk());
                            iTextSharp.text.pdf.PdfTemplate tCover = writer.GetImportedPage(reader, i);
                            contentbyte = writer.DirectContent;
                            // basic positioning: need to account for page size in future

                            // default values: in PB briefs, y_coordinate will not vary
                            float x_coordinate = 575.5f, y_coordinate = -76.5f;

                            switch (cover_length)
                            {
                            default:
                            case 48:     // GOOD: TESTED 11/16/15
                                y_coordinate = -88.5f;
                                break;

                            case 49:     // STILL AN ESTIMATE
                                y_coordinate = -82.5f;
                                break;

                            case 50:     // GOOD: TESTED 11/16/15
                                y_coordinate = -76.5f;
                                break;

                            case 51:     // GOOD: TESTED 11/16/15
                                y_coordinate = -70.5f;
                                break;
                            }
                            contentbyte.AddTemplate(tCover, x_coordinate, y_coordinate);
                        }
                        if (i == 2)
                        {
                            // not set up for multiple inside cover pages yet !!!
                            docB4.NewPage();
                            docB4.Add(new iTextSharp.text.Chunk());
                            iTextSharp.text.pdf.PdfTemplate tInsideCover = writer.GetImportedPage(reader, i);
                            contentbyte = writer.DirectContent;
                            contentbyte.AddTemplate(tInsideCover, 113f, -126f);
                        }
                    }
                    docB4.Close();
                    reader.Close();
                    writer.Close();
                }
                System.IO.File.Delete(src);
                System.IO.File.Move(dest, src);
                return(true);
            }
            catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); }
        }