Example #1
0
        void  LoadDocument()
        {
            MemoryStream  memory   = new MemoryStream(convertDocToByteArray(@"D:\Code Project\Subrip\Document\HSK Book.pdf"));
            BinaryReader  BRreader = new BinaryReader(memory);
            StringBuilder text     = new StringBuilder();


            iText.Kernel.Pdf.PdfReader   iTextReader = new iText.Kernel.Pdf.PdfReader(memory);
            iText.Kernel.Pdf.PdfDocument pdfDoc      = new iText.Kernel.Pdf.PdfDocument(iTextReader);



            int numberofpages = pdfDoc.GetNumberOfPages();
            List <Tuple <int, string> > Contents = new List <Tuple <int, string> >();


            for (int page = 1; page <= numberofpages; page++)
            {
                iText.Kernel.Pdf.Canvas.Parser.Listener.ITextExtractionStrategy strategy = new iText.Kernel.Pdf.Canvas.Parser.Listener.LocationTextExtractionStrategy();

                string currentText = iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(page), strategy);
                currentText = Encoding.UTF8.GetString(UTF8Encoding.Convert(
                                                          Encoding.UTF8, Encoding.UTF8, Encoding.UTF8.GetBytes(currentText)));
                text.Append(currentText);


                Tuple <int, string> tuple = new Tuple <int, string>(page, currentText);
                Contents.Add(tuple);
            }


            document = Contents;
        }
        public IEnumerable <StockAdvice> ReadStockAdvice(FileInfo file)
        {
            var stockAdvices = new List <StockAdvice>();
            var reader       = new iText.Kernel.Pdf.PdfReader(file);
            var doc          = new iText.Kernel.Pdf.PdfDocument(reader);
            var pageCount    = doc.GetNumberOfPages();

            if (pageCount > 0)
            {
                for (int pageNum = 1; pageNum < pageCount; pageNum++)
                {
                    var    page        = doc.GetPage(pageNum);
                    var    pageData    = page.GetContentBytes();
                    string pageContent = Encoding.UTF8.GetString(pageData);
                    var    folder      = file.Directory;
                    var    fileName    = Path.Combine(folder.FullName, file.Name + "_Page_" + pageNum + ".txt");
                    WritePageContentToFile(fileName, pageContent);
                }
            }

            doc.Close();
            reader.Close();

            return(stockAdvices);
        }
Example #3
0
        public Page[] GetBlocks(byte[] contents)
        {
            List <Page> lstPages = new List <Page>();

            using (var stm = new System.IO.MemoryStream(contents))
            {
                using (var pdfReader = new iText.Kernel.Pdf.PdfReader(stm))
                {
                    using (iText.Kernel.Pdf.PdfDocument doc = new iText.Kernel.Pdf.PdfDocument(pdfReader))
                    {
                        int numOfPages = doc.GetNumberOfPages();
                        for (int page = 1; page <= numOfPages; page++)
                        {
                            var pdfPage  = doc.GetPage(page);
                            var pg       = new Page();
                            var rotation = pdfPage.GetPageSizeWithRotation();
                            pg.Height = rotation.GetHeight();
                            pg.Width  = rotation.GetWidth();
                            var customListener = new CustomEventListener();
                            var parser         = new PdfCanvasProcessor(customListener);
                            parser.ProcessPageContent(pdfPage);
                            var lstBlocks = customListener.Blocks;
                            pg.Blocks = customListener.Blocks.ToArray();
                            lstPages.Add(pg);
                        }
                    }
                }
            }
            return(lstPages.ToArray());
        }
Example #4
0
        /// <summary>
        /// Reads PDF file by a given path.
        /// </summary>
        /// <param name="path">The path to the file</param>
        /// <param name="pageCount">The number of pages to read (0=all, 1 by default) </param>
        /// <returns></returns>
        public static DocumentTree PdfToText(string path, int pageCount = 1)
        {
            var pages = new DocumentTree();

            using (iText.Kernel.Pdf.PdfReader reader = new iText.Kernel.Pdf.PdfReader(path))
            {
                using (iText.Kernel.Pdf.PdfDocument pdfDocument = new iText.Kernel.Pdf.PdfDocument(reader))
                {
                    var strategy = new iText.Kernel.Pdf.Canvas.Parser.Listener.LocationTextExtractionStrategy();

                    // set up pages to read
                    int pagesToRead = 1;
                    if (pageCount > 0)
                    {
                        pagesToRead = pageCount;
                    }
                    if (pagesToRead > pdfDocument.GetNumberOfPages() || pageCount == 0)
                    {
                        pagesToRead = pdfDocument.GetNumberOfPages();
                    }

                    // for each page to read...
                    for (int i = 1; i <= pagesToRead; ++i)
                    {
                        // get the page and save it
                        var page = pdfDocument.GetPage(i);
                        var txt  = iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor.GetTextFromPage(page, strategy);
                        pages.Add(txt);
                    }
                    pdfDocument.Close();
                    reader.Close();
                }
            }
            return(pages);
        }
Example #5
0
        public override BookAtHome GetPocoBook(string filepath)
        {
            iText.Kernel.Pdf.PdfReader   reader = null;
            iText.Kernel.Pdf.PdfDocument pDoc   = null;
            const int extracted_phrase_len      = 500;

            try
            {
                if (File.Exists(filepath))
                {
                    reader = new iText.Kernel.Pdf.PdfReader(filepath);
                    pDoc   = new iText.Kernel.Pdf.PdfDocument(reader);
                    int    nPages      = pDoc.GetNumberOfPages();
                    int    maxsearch   = nPages < 15 ? nPages : 10;
                    string currentText = string.Empty;
                    for (int i = 1; i <= maxsearch; i++)
                    {
                        ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                        currentText = PdfTextExtractor.GetTextFromPage(pDoc.GetPage(i), strategy);

                        currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));

                        if (currentText.ToLower().Contains("isbn", System.StringComparison.InvariantCulture))
                        {
                            string pattern = @"ISBN(-1(?:(0)|3))?:?\x20(\s)*[0-9]+[- ][0-9]+[- ][0-9]+[- ][0-9]*[- ]*[xX0-9]";

                            Match m = Regex.Match(currentText.Replace(":", "").Replace("-", " "), pattern);

                            if (m.Success)
                            {
                                PocoBook retBook = base.GetPocoBook(filepath) as PocoBook;
                                retBook.Isbnsearch = m.Value;
                                return(retBook);
                            }
                        }
                    }
                    PocoBook abook = base.GetPocoBook(filepath) as PocoBook;
                    int      len   = currentText.Length < extracted_phrase_len ? currentText.Length : extracted_phrase_len;
                    abook.SearchPhrase = currentText.Substring(0, len);

                    return(abook);
                }
            }
            catch (IOException)
            {
                return(new PocoBook(filepath));
            }
            finally
            {
                ((IDisposable)reader)?.Dispose();
                ((IDisposable)pDoc)?.Dispose();
                reader?.Close();
            }

            return(base.GetPocoBook(filepath));
        }
Example #6
0
        /// <summary>
        /// 利用itext7生成文字签名
        /// </summary>
        public void ConvertPdf1()
        {
            string sourcePath = $"C:\\test\\source.pdf";
            string targetPath = $"C:\\test\\target.pdf";
            string fontPath   = $"C:\\Windows\\Fonts\\simkai.ttf";

            string signPath1 = @"C:\Users\Administrator\Desktop\a.png";
            string signPath2 = @"C:\Users\Administrator\Desktop\b.png";
            string signPath3 = @"C:\Users\Administrator\Desktop\c.png";
            string signPath4 = @"C:\Users\Administrator\Desktop\d.png";


            //输入PDF
            using (iText.Kernel.Pdf.PdfReader reader = new iText.Kernel.Pdf.PdfReader(sourcePath))
            {
                //输出PDF
                using (iText.Kernel.Pdf.PdfWriter writer = new iText.Kernel.Pdf.PdfWriter(targetPath))
                {
                    //获取PDF对象
                    using (iText.Kernel.Pdf.PdfDocument pdfDocument = new iText.Kernel.Pdf.PdfDocument(reader, writer))
                    {
                        //获取Document对象
                        using (iText.Layout.Document document = new iText.Layout.Document(pdfDocument))
                        {
                            //从物理文件加载图片
                            iText.Layout.Element.Image image1 = new iText.Layout.Element.Image(iText.IO.Image.ImageDataFactory.Create(signPath1));
                            iText.Layout.Element.Image image2 = new iText.Layout.Element.Image(iText.IO.Image.ImageDataFactory.Create(signPath2));
                            iText.Layout.Element.Image image3 = new iText.Layout.Element.Image(iText.IO.Image.ImageDataFactory.Create(signPath3));
                            iText.Layout.Element.Image image4 = new iText.Layout.Element.Image(iText.IO.Image.ImageDataFactory.Create(signPath4));

                            //将图片绘制到PDF的绝对坐标上,同时缩放图片
                            //坐标与绘制文字的坐标几乎一致,稍微向左,向上一些
                            //缩放的宽度与后面的宽度一致,示例中是200
                            //缩放的高度计算两个签名之间的高度差,例如93-73=20
                            //注意示例采用的签名图片的尺寸是:400px * 150px,应当采取和它差不多的尺寸效果最佳
                            document.Add(image1.ScaleToFit(200, 20).SetFixedPosition(1, 3089, 93, 200));
                            document.Add(image2.ScaleToFit(200, 20).SetFixedPosition(1, 3089, 73, 200));
                            document.Add(image3.ScaleToFit(200, 20).SetFixedPosition(1, 3089, 53, 200));
                            document.Add(image4.ScaleToFit(200, 20).SetFixedPosition(1, 3089, 33, 200));

                            //加载字体
                            iText.Kernel.Font.PdfFont font = iText.Kernel.Font.PdfFontFactory.CreateFont(fontPath, iText.IO.Font.PdfEncodings.IDENTITY_H, true);

                            //添加文本
                            document.Add(new iText.Layout.Element.Paragraph("签名1").SetFont(font).SetFontSize(12).SetFixedPosition(1, 3090, 90, 200));
                            document.Add(new iText.Layout.Element.Paragraph("签名2").SetFont(font).SetFontSize(12).SetFixedPosition(1, 3090, 70, 200));
                            document.Add(new iText.Layout.Element.Paragraph("签名3").SetFont(font).SetFontSize(12).SetFixedPosition(1, 3090, 50, 200));
                            document.Add(new iText.Layout.Element.Paragraph("签名4").SetFont(font).SetFontSize(12).SetFixedPosition(1, 3090, 30, 200));
                        }
                    }
                }
            }
        }
Example #7
0
        public static void createDocument(List <ImageSelection> listImages, Appearance appearance, PageSize pageSize, string exportFile)
        {
            checkSameDocuments(ref exportFile);

            using (PdfWriter writer = new PdfWriter(exportFile))
            {
                using (PdfDocument pdf = new PdfDocument(writer))
                {
                    Document pdoc = new Document(pdf, pageSize);

                    pdoc.SetMargins(14.1665f, 14.1665f, 14.1665f, 14.1665f);



                    Table table = tableStyle(appearance, pageSize, pdoc);



                    for (int k = 0, i = 0, j = 0; k < listImages.Count; k++, j++)
                    {
                        if (j == appearance.getDimensions().Length)
                        {
                            j = 0; i++;
                        }
                        if (i == appearance.getHeightRatio())
                        {
                            pdoc.Add(table);
                            table = tableStyle(appearance, pageSize, pdoc);

                            pdoc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));
                            j = i = 0;
                        }

                        Image img = new Image(iText.IO.Image.ImageDataFactory.Create(listImages.ElementAt(k).getPath()));

                        imgStyle(ref img, listImages.ElementAt(k));


                        table.GetCell(i, j).Add(img);
                    }
                    pdoc.Add(table);


                    pdoc.Close();
                }
            }
        }
        public static bool CompareAgainstPdf(TestContext testContext, string filenameOutput, string filenameShall, int nAcceptedDifferences = 0)
        {
            var pdfReaderOutput = new iText.Kernel.Pdf.PdfReader(filenameOutput);
            var pdfOutput       = new iText.Kernel.Pdf.PdfDocument(pdfReaderOutput);

            var pdfReaderShall = new iText.Kernel.Pdf.PdfReader(filenameShall);
            var pdfShall       = new iText.Kernel.Pdf.PdfDocument(pdfReaderShall);

            var ct     = new iText.Kernel.Utils.CompareTool();
            var result = ct.CompareByCatalog(pdfOutput, pdfShall);

            testContext.WriteLine(string.Format("Diff of {0} <-> {1}", filenameOutput, filenameShall));
            foreach (var dif in result.GetDifferences())
            {
                testContext.WriteLine(dif.Value);
            }
            return(result.GetDifferences().Count <= nAcceptedDifferences);
        }
Example #9
0
            //[Benchmark]
            //public void iText_Split_125Mb_gt_7500pages_10_pages()
            //{
            //    RuniTextBenchmark("sample_125Mb_gt_7500pages.pdf", 10);
            //}

            public void RuniTextBenchmark(string fileToSplit, int splitByPagesNumber, int?pagesCountToProcess = null)
            {
                var srcFile = Path.Combine(_rootFolder, fileToSplit);
                var file    = new FileInfo(srcFile);
                var name    = file.Name.Substring(0, file.Name.LastIndexOf(".", StringComparison.Ordinal));

                using (var reader = new iText.Kernel.Pdf.PdfReader(srcFile))
                {
                    var doc = new iText.Kernel.Pdf.PdfDocument(reader);

                    var splitter          = new CustomFileSplitter(doc, _resultsiTextFolder, name);
                    var splittedDocuments = splitter.SplitByPageCount(splitByPagesNumber);

                    foreach (var sd in splittedDocuments)
                    {
                        sd.Close();
                    }
                    doc.Close();
                }
            }
Example #10
0
        public static PdfDocument CompatibleOpen(MemoryStream inputStream, PdfDocumentOpenMode openMode)
        {
            PdfDocument pdfDocument = null;

            inputStream.Position = 0;

            try
            {
                pdfDocument = PdfReader.Open(inputStream, openMode);
            }
            catch (PdfSharp.Pdf.IO.PdfReaderException)
            {
                inputStream.Position = 0;
                MemoryStream outputStream = new MemoryStream();

                iText.Kernel.Pdf.WriterProperties writerProperties = new iText.Kernel.Pdf.WriterProperties();
                writerProperties.SetPdfVersion(iText.Kernel.Pdf.PdfVersion.PDF_1_4);

                iText.Kernel.Pdf.PdfReader pdfReader = new iText.Kernel.Pdf.PdfReader(inputStream);

                iText.Kernel.Pdf.PdfDocument pdfStamper = new iText.Kernel.Pdf.PdfDocument(pdfReader, new iText.Kernel.Pdf.PdfWriter(outputStream, writerProperties));

                iText.Forms.PdfAcroForm pdfForm = iText.Forms.PdfAcroForm.GetAcroForm(pdfStamper, true);
                if (pdfForm != null)
                {
                    pdfForm.FlattenFields();
                }
                writerProperties.SetFullCompressionMode(false);

                pdfStamper.GetWriter().SetCloseStream(false);
                pdfStamper.Close();

                pdfDocument = PdfReader.Open(outputStream, openMode);
            }
            return(pdfDocument);
        }
Example #11
0
 public CustomFileSplitter(iText.Kernel.Pdf.PdfDocument pdfDocument, string resultsiTextFolder, string originalFileName) : base(pdfDocument)
 {
     _partNumber         = 1;
     _resultsiTextFolder = resultsiTextFolder;
     _originalFileName   = originalFileName;
 }
Example #12
0
        public static void createDocument(List <ImageSelection> listImages, Appearance appearance, PageSize pageSize, string exportFile, Format format)
        {
            checkSameDocuments(ref exportFile);

            using (PdfWriter writer = new PdfWriter(exportFile))
            {
                using (PdfDocument pdf = new PdfDocument(writer))
                {
                    Document pdoc = new Document(pdf, pageSize);
                    pdoc.SetMargins(8.5f, 8.5f, 8.5f, 8.5f);
                    Appearance coverAppearance = new Appearance(appearance.getAppearanceType(), format, 1);

                    Table table = tableStyle(coverAppearance, pageSize, pdoc);
                    table = tableStyle(coverAppearance, pageSize, pdoc);
                    Image imgc = null;
                    try
                    {
                        imgc = new Image(iText.IO.Image.ImageDataFactory.Create(listImages.ElementAt(0).getPath()));
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        MessageBox.Show("There's no image selected !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        pdoc = null;
                        //pdf = null;
                        pdf.AddNewPage();
                        pdf.Close();
                        writer.Close();
                        File.Delete(exportFile);

                        return;
                    }

                    imgStyle(ref imgc, listImages.ElementAt(0));

                    table.GetCell(0, 0).Add(imgc);
                    pdoc.Add(table);



                    table = tableStyle(appearance, pageSize, pdoc);
                    pdoc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));

                    for (int k = 1, i = 0, j = 0; k < listImages.Count - 1; k++, j++)
                    {
                        if (j == appearance.getDimensions().Length)
                        {
                            j = 0; i++;
                        }
                        if (i == appearance.getHeightRatio())
                        {
                            pdoc.Add(table);
                            table = tableStyle(appearance, pageSize, pdoc);

                            pdoc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));
                            j = i = 0;
                        }

                        Image img = new Image(iText.IO.Image.ImageDataFactory.Create(listImages.ElementAt(k).getPath()));

                        imgStyle(ref img, listImages.ElementAt(k));
                        Console.WriteLine(listImages.ElementAt(k).format);


                        table.GetCell(i, j).Add(img);
                    }
                    pdoc.Add(table);

                    pdoc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));


                    table = tableStyle(coverAppearance, pageSize, pdoc);
                    imgc  = new Image(iText.IO.Image.ImageDataFactory.Create(listImages.ElementAt(listImages.Count - 1).getPath()));
                    imgStyle(ref imgc, listImages.ElementAt(listImages.Count - 1));
                    table.GetCell(0, 0).Add(imgc);
                    pdoc.Add(table);


                    pdoc.Close();
                }
            }
        }
Example #13
0
        public static void createDocument(List <ImageSelection> listImages, Appearance appearance, PageSize pageSize, string exportFile, Format format, bool value)
        {
            checkSameDocuments(ref exportFile);

            Console.WriteLine();
            using (PdfWriter writer = new PdfWriter(exportFile))
            {
                using (PdfDocument pdf = new PdfDocument(writer))
                {
                    Document pdoc = new Document(pdf, pageSize);
                    pdoc.SetMargins(0f, 0f, 0f, 0f);
                    Appearance coverAppearance = new Appearance(appearance.getAppearanceType(), format, 1);
                    Appearance currentAppearance;



                    List <ImageSelection> currentImgsList = new List <ImageSelection>();
                    List <Image>          imgs            = new List <Image>();
                    List <Image>          currentImgs     = new List <Image>();

                    for (int i = 0; i < listImages.Count; i++)
                    {
                        imgs.Add(new Image(iText.IO.Image.ImageDataFactory.Create(listImages.ElementAt(i).getPath())));
                        imgs.ElementAt(i).SetHorizontalAlignment(HorizontalAlignment.CENTER);
                        imgs.ElementAt(i).SetAutoScale(true);


                        imgStyle(imgs.ElementAt(i), listImages.ElementAt(i));
                    }
                    setOrientation = true;


                    /// First page
                    Table table = null;
                    try
                    {
                        imgs.ElementAt(0).SetAutoScale(true);

                        table = tableStyle(coverAppearance, pageSize, pdoc);


                        table.GetCell(0, 0).SetMargins(0f, 0f, 0f, 0f);
                        table.GetCell(0, 0).SetPaddings(0f, 0f, 0f, 0f);


                        table.SetMargins(0f, 0f, 0f, 0f);
                        table.SetPaddings(0f, 0f, 0f, 0f);
                        //table.GetCell(0, 0).SetBorder(BorderStyle.FixedSingle);
                        table.GetCell(0, 0).SetVerticalAlignment(VerticalAlignment.MIDDLE);
                        table.GetCell(0, 0).Add(imgs.ElementAt(0));

                        pdoc.Add(table);

                        if (imgs.Count > 2)
                        {
                            pdoc.SetMargins(8.5f, 8.5f, 8.5f, 8.5f);
                        }
                        pdoc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        MessageBox.Show("There's no image selected !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        pdoc = null;
                        //pdf = null;
                        pdf.AddNewPage();
                        pdf.Close();
                        writer.Close();
                        File.Delete(exportFile);

                        return;
                    }



                    for (int k = 1, p = 0; k < listImages.Count - 1; k++)
                    {
                        currentImgsList.Add(listImages.ElementAt(k));
                        currentImgs.Add(imgs.ElementAt(k));
                        if (k % appearance.getImgNumber() == 0)
                        {
                            currentAppearance = new Appearance(appearance.getAppearanceType(), format, appearance.getImgNumber(), getLandscape(currentImgsList), getPortrait(currentImgsList));
                            Console.WriteLine(currentAppearance.specialCond);
                            switch (currentAppearance.specialCond)
                            {
                            case "21x15_4P0L": table = Custom.customTable1(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x15_3P1L": table = Custom.customTable2(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x15_2P2L": table = Custom.customTable3(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x15_1P3L": table = Custom.customTable3(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x15_0P4L": table = Custom.customTable3(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;


                            case "20x20_1P2L": table = Custom.customTable4(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_2P1L": table = Custom.customTable5(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_0P3L": table = Custom.customTable6(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_3P0L": table = Custom.customTable7(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_4_1P3L": table = Custom.customTable8(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_4_2P2L": table = Custom.customTable9(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_4_0P4L": table = Custom.customTable10(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_4_3P1L": table = Custom.customTable11(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "20x20_4_4P0L": table = Custom.customTable12(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;


                            case "21x30_4_1P3L": table = Custom.customTable13(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_4_2P2L": table = Custom.customTable14(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_4_3P1L": table = Custom.customTable15(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_4_0P4L": table = Custom.customTable16(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_4_4P0L": table = Custom.customTable17(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_6_5P1L": table = Custom.customTable18(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_6_1P5L": table = Custom.customTable19(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_6_2P4L": table = Custom.customTable20(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_6_3P3L": table = Custom.customTable21(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_6_4P2L": table = Custom.customTable22(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_6_0P6L": table = Custom.customTable23(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;

                            case "21x30_6_6P0L": table = Custom.customTable24(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs); break;
                            }
                            Console.WriteLine("Portraits: " + getPortrait(currentImgsList) + "Landscapes: " + getLandscape(currentImgsList));
                            currentImgsList.Clear();
                            currentImgs.Clear();



                            p++;
                            if (((listImages.Count - 2) / appearance.getImgNumber() == p) && ((listImages.Count - 2) % appearance.getImgNumber() == 0))
                            {
                                pdoc.SetMargins(0f, 0f, 0f, 0f);
                            }

                            pdoc.Add(table);
                            pdoc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));
                        }
                    }
                    if (currentImgsList.Count > 0)
                    {
                        currentAppearance = new Appearance("reminder", appearance.getImgNumber());
                        table             = Custom.customTable3(currentAppearance, pageSize, pdoc, currentImgsList, currentImgs);
                        currentImgsList.Clear();
                        currentImgs.Clear();

                        pdoc.Add(table);

                        pdoc.SetMargins(0f, 0f, 0f, 0f);
                        pdoc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));
                    }


                    imgs.ElementAt(imgs.Count - 1).SetAutoScale(true);


                    table = tableStyle(coverAppearance, pageSize, pdoc);


                    table.GetCell(0, 0).SetMargins(0f, 0f, 0f, 0f);
                    table.GetCell(0, 0).SetPaddings(0f, 0f, 0f, 0f);


                    table.SetMargins(0f, 0f, 0f, 0f);
                    table.SetPaddings(0f, 0f, 0f, 0f);
                    //table.GetCell(0, 0).SetBorder(BorderStyle.FixedSingle);
                    table.GetCell(0, 0).SetVerticalAlignment(VerticalAlignment.MIDDLE);
                    table.GetCell(0, 0).Add(imgs.ElementAt(imgs.Count - 1));

                    pdoc.Add(table);


                    pdoc.Close();
                }
            }
        }
        public IHttpActionResult MergeDocs(DocumentsData documentsData)
        {
            System.IO.Directory.CreateDirectory(resultPath + documentsData.unique_filepath);

            this.resultPdf    = new iText.Kernel.Pdf.PdfDocument(new iText.Kernel.Pdf.PdfWriter(resultPath + documentsData.unique_filepath + "\\resultMerge" + documentsData.unique_filepath + ".pdf"));
            this.returnResult = resultPath + documentsData.unique_filepath + "\\resultMerge" + documentsData.unique_filepath + ".pdf";

            this.remoteHost = HttpContext.Current.Request.Url.Host.ToString().Trim();

            foreach (string filename in documentsData.filenames)
            {
                string[] filename_parts = filename.Split('.');

                string sourceFilePath = this.remoteHost + "/" + documentsData.filepath + "/" + filename;

                if (filename_parts[1] == "docx")
                {
                    Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();

                    var docs = app.Documents;
                    var doc  = docs.Open(sourceFilePath, true, true, false);

                    doc.Activate();

                    string printPath = resultPath + documentsData.unique_filepath + "\\" + filename_parts[0] + ".pdf";

                    doc.ExportAsFixedFormat(printPath.ToString(), Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);

                    doc.Close();

                    Marshal.FinalReleaseComObject(doc);

                    Marshal.FinalReleaseComObject(docs);

                    app.Quit();

                    Marshal.FinalReleaseComObject(app);

                    app = null; doc = null; docs = null;

                    GC.Collect(); GC.WaitForPendingFinalizers();
                    GC.Collect(); GC.WaitForPendingFinalizers();

                    this.GenerateSinglePdf(printPath);
                }
                else if (filename_parts[1] == "xlsx")
                {
                    Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();

                    var wbs = app.Workbooks;
                    var wb  = wbs.Open(sourceFilePath);

                    wb.Activate();

                    string printPath = resultPath + documentsData.unique_filepath + "\\" + filename_parts[0] + ".pdf";

                    wb.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, printPath.ToString());

                    wb.Close();

                    Marshal.FinalReleaseComObject(wb);

                    wbs.Close();

                    Marshal.FinalReleaseComObject(wbs);

                    app.Quit();

                    Marshal.FinalReleaseComObject(app);

                    app = null; wb = null; wbs = null;

                    GC.Collect(); GC.WaitForPendingFinalizers();
                    GC.Collect(); GC.WaitForPendingFinalizers();

                    this.GenerateSinglePdf(printPath);
                }
                else
                {
                    throw new Exception("Wrong file format. Only docx/xlsx 2007-2013/16 file formats are supported.");
                }
            }

            this.resultPdf.Close();

            GC.Collect(); GC.WaitForPendingFinalizers();
            GC.Collect(); GC.WaitForPendingFinalizers();

            byte[] byteArray = File.ReadAllBytes(this.returnResult);

/*            MemoryStream ms = new MemoryStream();
 *          ms.Write(byteArray, 0 , byteArray.Length);                 // FOR LARGER FILES SEND FILESTREAM CONTENT TO THE RESPONSE IF NEEDED
 *          ms.Position = 0;*/

            IHttpActionResult response;

            HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.OK);


            responseMsg.Content = new ByteArrayContent(byteArray);

            responseMsg.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");

            responseMsg.Content.Headers.ContentDisposition.FileName = "resultMerge_" + documentsData.unique_filepath + ".pdf";

            responseMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

            response = ResponseMessage(responseMsg);


            return(response);
        }
        private void GenerateSinglePdf(string targetPDF)
        {
            iText.Kernel.Pdf.PdfDocument docToMerge = new iText.Kernel.Pdf.PdfDocument(new iText.Kernel.Pdf.PdfReader(targetPDF));

            docToMerge.CopyPagesTo(1, docToMerge.GetNumberOfPages(), this.resultPdf);
        }