예제 #1
0
        /**
         * Parses an HTML string and a string containing CSS into a list of Element objects.
         * The FontProvider will be obtained from iText's FontFactory object.
         *
         * @param   html    a String containing an XHTML snippet
         * @param   css     a String containing CSS
         * @return  an ElementList instance
         */
        public static ElementList ParseToElementList(String html, String css)
        {
            // CSS
            ICSSResolver cssResolver = new StyleAttrCSSResolver();

            if (css != null)
            {
                ICssFile cssFile = XMLWorkerHelper.GetCSS(new MemoryStream(Encoding.Default.GetBytes(css)));
                cssResolver.AddCss(cssFile);
            }

            // HTML
            CssAppliers         cssAppliers = new CssAppliersImpl(FontFactory.FontImp);
            HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);

            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            htmlContext.AutoBookmark(false);

            // Pipelines
            ElementList            elements     = new ElementList();
            ElementHandlerPipeline end          = new ElementHandlerPipeline(elements, null);
            HtmlPipeline           htmlPipeline = new HtmlPipeline(htmlContext, end);
            CssResolverPipeline    cssPipeline  = new CssResolverPipeline(cssResolver, htmlPipeline);

            // XML Worker
            XMLWorker worker = new XMLWorker(cssPipeline, true);
            XMLParser p      = new XMLParser(worker);

            p.Parse(new MemoryStream(Encoding.Default.GetBytes(html)));

            return(elements);
        }
예제 #2
0
        public static ElementList ParseToElementList(string html, string css)
        {
            ICSSResolver iCSSResolver = new StyleAttrCSSResolver();

            if (css != null)
            {
                ICssFile cSS = XMLWorkerHelper.GetCSS(new MemoryStream(Encoding.Default.GetBytes(css)));
                iCSSResolver.AddCss(cSS);
            }

            MyFontsProvider fontProvider = new MyFontsProvider();
            CssAppliers     cssAppliers  = new CssAppliersImpl(fontProvider);
            //CssAppliers cssAppliers = new CssAppliersImpl(FontFactory.FontImp);
            HtmlPipelineContext htmlPipelineContext = new HtmlPipelineContext(cssAppliers);

            htmlPipelineContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            htmlPipelineContext.AutoBookmark(false);
            ElementList            elementList = new ElementList();
            ElementHandlerPipeline next        = new ElementHandlerPipeline(elementList, null);
            HtmlPipeline           next2       = new HtmlPipeline(htmlPipelineContext, next);
            CssResolverPipeline    pipeline    = new CssResolverPipeline(iCSSResolver, next2);
            XMLWorker listener  = new XMLWorker(pipeline, true);
            XMLParser xMLParser = new XMLParser(listener);

            //因为XMLWork不支持html的单标签,所以要对单标签进行过滤。不然就会报错:Invalid nested tag div found, expected closing tag br
            html = html.Replace("<br>", "").Replace("<hr>", "").Replace("<img>", "").Replace("<param>", "")
                   .Replace("<link>", "");

            //xMLParser.Parse(new MemoryStream(Encoding.Default.GetBytes(html)));
            xMLParser.Parse(new MemoryStream(Encoding.UTF8.GetBytes(html)));
            return(elementList);
        }
예제 #3
0
        private MemoryStream GetPDFStream(string htmlContent, string CSSContent)
        {
            iTextSharp.text.Document document = new iTextSharp.text.Document();
            try
            {
                MemoryStream memStream = new System.IO.MemoryStream();
                PdfWriter    writer    = PdfWriter.GetInstance(document, memStream);

                document.Open();

                var interfaceProps = new Dictionary <string, Object>();
                var ih             = new ImageHander()
                {
                    BaseUri = Request.Url.ToString()
                };

                interfaceProps.Add(HTMLWorker.IMG_PROVIDER, ih);

                var cssResolver = new StyleAttrCSSResolver();

                var CSSStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(CSSContent));

                var cssFile = XMLWorkerHelper.GetCSS(CSSStream);
                cssResolver.AddCss(cssFile);

                CssAppliers         ca  = new CssAppliersImpl();
                HtmlPipelineContext hpc = new HtmlPipelineContext(ca);
                hpc.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

                PdfWriterPipeline   pdf = new PdfWriterPipeline(document, writer);
                CssResolverPipeline css = new CssResolverPipeline(cssResolver, new HtmlPipeline(hpc, pdf));

                XMLWorker xworker = new XMLWorker(css, true);
                XMLParser p       = new XMLParser(xworker);


                var HTMLStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(htmlContent));
                var CSSStream1 = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(CSSContent));

                using (TextReader sr = new StringReader(htmlContent))
                {
                    XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, HTMLStream, CSSStream1);
                    //p.Parse(sr);
                }

                writer.CloseStream = false;
                document.Close();

                return(memStream);
            }
            catch (Exception ex)
            {
                document.Close();
                litPdfViewMsg.Text = ex.Message;
                //throw ex;
                return(null);
            }
        }
예제 #4
0
        private void processHtml(IElementHandler elementsHandler)
        {
            var cssResolver = new StyleAttrCSSResolver();

            if (CssFilesPath != null && CssFilesPath.Any())
            {
                foreach (var cssFile in CssFilesPath)
                {
                    cssResolver.AddCss(XmlWorkerUtils.GetCssFile(cssFile));
                }
            }

            if (!string.IsNullOrEmpty(InlineCss))
            {
                cssResolver.AddCss(InlineCss, "utf-8", true);
            }

            var htmlContext = new HtmlPipelineContext(new CssAppliersImpl(new UnicodeFontProvider(DefaultFont)));

            if (!string.IsNullOrEmpty(ImagesPath))
            {
                htmlContext.SetImageProvider(new ImageProvider {
                    ImagesPath = ImagesPath
                });
            }
            htmlContext.CharSet(Encoding.UTF8);

            var tagsProcessorFactory = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();

            if (PdfElement != null)
            {
                tagsProcessorFactory.AddProcessor("totalpagesnumber", new TotalPagesNumberXmlWorkerProcessor(PdfElement));
            }

            htmlContext.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagsProcessorFactory);
            var pipeline = new CssResolverPipeline(cssResolver,
                                                   new HtmlPipeline(htmlContext, new ElementHandlerPipeline(elementsHandler, null)));
            var worker = new XMLWorker(pipeline, parseHtml: true);
            var parser = new XMLParser();

            parser.AddListener(worker);
            parser.Parse(new StringReader(Html));
        }
예제 #5
0
        /**
         * Get a CSSResolver implementation.
         *
         * @param addDefaultCss true if the defaultCss should already be added.
         * @return the default CSSResolver
         *
         */
        virtual public ICSSResolver GetDefaultCssResolver(bool addDefaultCss)
        {
            ICSSResolver resolver = new StyleAttrCSSResolver();

            if (addDefaultCss)
            {
                resolver.AddCss(GetDefaultCSS());
            }
            return(resolver);
        }
        //public FileResult GetEligibilityForm(string id = "0")
        public ActionResult GetMDTFormPDF(long id = 0, bool isdoc = false)
        {
            var fileBytes = new byte[0];

            if (isdoc)
            {
                var attachDetails = FactoryInstance.Instance.CreateInstance <Reporting>().GetMDTAttachmentById(id);
                fileBytes = attachDetails.AttachmentFileByte;
            }
            else
            {
                var result = FactoryInstance.Instance.CreateInstance <Reporting>().GetMDTReportById(id, "pdf");
                // Render the view xml to a string, then parse that string into an XML dom.
                string html   = this.RenderActionResultToString(this.View("MDTFormPdfView", result));
                var    output = new MemoryStream();
                using (var doc = new Document(PageSize.A4))
                {
                    var writer = PdfWriter.GetInstance(doc, output);

                    PDFBackgroundHelper pageEventHelper = new PDFBackgroundHelper();
                    writer.PageEvent = pageEventHelper;

                    writer.CloseStream = false;
                    doc.Open();


                    var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                    tagProcessors.RemoveProcessor(HTML.Tag.IMG);                             // remove the default processor
                    tagProcessors.AddProcessor(HTML.Tag.IMG, new CustomImageTagProcessor()); // use our new processor

                    CssFilesImpl cssFiles = new CssFilesImpl();
                    cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                    var cssResolver = new StyleAttrCSSResolver(cssFiles);
                    cssResolver.AddCss(@"code { padding: 2px 4px; }", "utf-8", true);
                    var charset = Encoding.UTF8;
                    var hpc     = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider()));
                    hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors); // inject the tagProcessors
                    var htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, writer));
                    var pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
                    var worker       = new XMLWorker(pipeline, true);
                    var xmlParser    = new XMLParser(true, worker, charset);
                    xmlParser.Parse(new StringReader(html));
                }

                output.Position = 0;
                fileBytes       = output.ToArray();
            }
            // Send the binary data to the browser.
            return(new BinaryContentResult(fileBytes, "application/pdf"));
            // return File(fileBytes, "application/pdf", "MDT form of" + result.Name + ".pdf");
        }
        virtual public void SetUp()
        {
            StyleAttrCSSResolver css = new StyleAttrCSSResolver();

            css.AddCss("dummy { key1: value1; key2: value2 } .aklass { key3: value3;} #dumid { key4: value4}", true);
            CssResolverPipeline p = new CssResolverPipeline(css, null);
            Tag t = new Tag("dummy");

            t.Attributes["id"]    = "dumid";
            t.Attributes["class"] = "aklass";
            WorkerContextImpl context = new WorkerContextImpl();

            p.Init(context);
            IPipeline open = p.Open(context, t, null);

            css2 = t.CSS;
        }
예제 #8
0
        public static void ServePdfEmbeddedImages(string url)
        {
            using (var doc = new Document(PageSize.LETTER))
            {
                var writer = PdfWriter.GetInstance(doc, HttpContext.Current.Response.OutputStream);
                writer.InitialLeading = 12.5f;
                doc.Open();

                string   lastPart = "";
                string[] parts    = url.Split('=');
                if (parts.Count() > 2)
                {
                    lastPart = "_" + parts[parts.Count() - 2];
                }

                HttpContext.Current.Response.ContentType = "application/pdf";
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=Alert" + lastPart + ".pdf");
                HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);

                WebClient web  = new WebClient();
                var       html = web.DownloadString(url);

                var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                tagProcessors.RemoveProcessor(HTML.Tag.IMG);                             // remove the default processor
                tagProcessors.AddProcessor(HTML.Tag.IMG, new CustomImageTagProcessor()); // use our new processor

                CssFilesImpl cssFiles = new CssFilesImpl();
                cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                var cssResolver = new StyleAttrCSSResolver(cssFiles);
                cssResolver.AddCss(@"code { padding: 2px 4px; } img { padding: 4px 8px; }", "utf-8", true);
                var charset = Encoding.UTF8;
                var hpc     = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider()));
                hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors);                 // inject the tagProcessors
                var htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, writer));
                var pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
                var worker       = new XMLWorker(pipeline, true);
                var xmlParser    = new XMLParser(true, worker, charset);
                xmlParser.Parse(new StringReader(html));

                HttpContext.Current.Response.Write(doc);
                HttpContext.Current.Response.End();
            }
            //Process.Start("test.pdf");
        }
예제 #9
0
        /// <summary>
        /// Creates a <see cref="PdfTable"/> object from specified <b>HTML</b> code.
        /// </summary>
        /// <param name="html">A reference to input html code to convert.</param>
        /// <param name="css">A reference to css styles to apply.</param>
        /// <param name="config">Table configuration reference.</param>
        /// <returns>
        /// A new <see cref="PdfPTable"/> that contains a
        /// </returns>
        public static PdfTable CreateFromHtml(string html, string css = default, PdfTableConfig config = null)
        {
            var hasCss = !string.IsNullOrEmpty(css);

            if (!hasCss)
            {
                css = " ";
            }

            // css
            StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver();
            ICssFile             cssFile     = XMLWorkerHelper.GetCSS(css.AsStream());

            cssResolver.AddCss(cssFile);

            // html
            XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts)));
            CssAppliers           cssAppliers  = new CssAppliersImpl(fontProvider);
            HtmlPipelineContext   htmlContext  = new HtmlPipelineContext(cssAppliers);

            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

            // pipelines
            ElementList            elements     = new ElementList();
            ElementHandlerPipeline pdf          = new ElementHandlerPipeline(elements, null);
            HtmlPipeline           htmlPipeline = new HtmlPipeline(htmlContext, pdf);
            CssResolverPipeline    cssPipeline  = new CssResolverPipeline(cssResolver, htmlPipeline);

            // XML Worker
            XMLWorker worker = new XMLWorker(cssPipeline, true);
            XMLParser parser = new XMLParser(worker, Encoding.UTF8);

            parser.Parse(html.AsStream(Encoding.UTF8));

            PdfPTable nativeTable = (PdfPTable)elements[0];

            return(new PdfTable(nativeTable, config));
        }
        private static void AddHTMLText(PdfWriter writer, Document document, string htmlString, List <string> stylesheetFilePath)
        {
            var cssResolver = new StyleAttrCSSResolver();

            Stream cssStream = null;

            if (stylesheetFilePath != null)
            {
                foreach (var stylesheetPath in stylesheetFilePath)
                {
                    cssStream = new FileStream(stylesheetPath, FileMode.Open, FileAccess.Read);
                    var cssFile = XMLWorkerHelper.GetCSS(cssStream);
                    cssResolver.AddCss(cssFile);
                }
            }

            var cssAppliersImpl     = new CssAppliersImpl();
            var htmlPipelineContext = new HtmlPipelineContext(cssAppliersImpl);

            htmlPipelineContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            htmlPipelineContext.SetImageProvider(new DownloadImageProvider());

            var pdfWriterPipeline   = new PdfWriterPipeline(document, writer);
            var htmlPipe            = new HtmlPipeline(htmlPipelineContext, pdfWriterPipeline);
            var cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipe);

            var worker       = new XMLWorker(cssResolverPipeline, true);
            var parser       = new XMLParser(worker);
            var stringReader = new StringReader(htmlString);

            parser.Parse(stringReader);

            if (cssStream != null)
            {
                cssStream.Dispose();
            }
        }
예제 #11
0
        public static byte[] HTMLToPdf(string htmlContent)
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            StringWriter           sw = new StringWriter(new StringBuilder(htmlContent));
            HtmlTextWriter         hw = new HtmlTextWriter(sw);
            StringReader           sr = new StringReader(sw.ToString());
            Document   pdfDoc         = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
            HTMLWorker htmlparser     = new HTMLWorker(pdfDoc);

            PdfWriter.GetInstance(pdfDoc, ms);
            pdfDoc.Open();
            htmlparser.Parse(sr);
            pdfDoc.Close();

            byte[] Result = ms.ToArray();

            return(Result);


            HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument();

            hd.OptionWriteEmptyNodes = true; //autoclose hr, br etc
            hd.OptionOutputAsXml     = true; //MJW extension to preserve case of server tags
            hd.LoadHtml(htmlContent);

#if (DEBUG)
            string tmpFile = Path.GetTempFileName();
            System.IO.File.WriteAllText(tmpFile, hd.DocumentNode.OuterHtml);
            System.Diagnostics.Debug.WriteLine(tmpFile);
#endif



            using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
                using (TextReader reader = new StringReader(hd.DocumentNode.OuterHtml))
                    using (Document document = new Document(PageSize.A4, 30, 30, 30, 30))
                        using (PdfWriter writer = PdfWriter.GetInstance(document, stream))
                            using (var srHtml = new StringReader(hd.DocumentNode.OuterHtml))
                            {
                                CssFilesImpl cssFiles = new CssFilesImpl();
                                cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                                var cssResolver = new StyleAttrCSSResolver(cssFiles);
                                cssResolver.AddCss(@"code { padding: 2px 4px; }", "utf-8", true);
                                var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                                tagProcessors.RemoveProcessor(HTML.Tag.IMG);                             // remove the default processor
                                tagProcessors.AddProcessor(HTML.Tag.IMG, new CustomImageTagProcessor()); // use our new processor
                                var charset = Encoding.UTF8;
                                var hpc     = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider()));
                                hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors); // inject the tagProcessors
                                var htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(document, writer));
                                var pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
                                var worker       = new XMLWorker(pipeline, true);
                                var xmlParser    = new XMLParser(true, worker, charset);



                                document.Open();
                                xmlParser.Parse(reader);
                                document.Close();

                                return(stream.ToArray());
                            }
        }
예제 #12
0
        public FileContentResult PDFView <T>(T model, string viewPath, string Page = "Potrait")
        {
            TSS_SurveyDocument TempModel = model as TSS_SurveyDocument;
            var Title = TempModel.SurveyTitle + " " + TempModel.SiteCode.ToString();
            var html  = WebUtility.HtmlDecode(GetHtml(model, viewPath));

            byte[] bytes;
            using (var ms = new MemoryStream())
            {
                using (var doc = new Document())
                {
                    using (var writer = PdfWriter.GetInstance(doc, ms))
                    {
                        doc.Open();
                        try
                        {
                            var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                            tagProcessors.RemoveProcessor(HTML.Tag.IMG);                             // remove the default processor
                            tagProcessors.AddProcessor(HTML.Tag.IMG, new CustomImageTagProcessor()); // use our new processor

                            CssFilesImpl cssFiles = new CssFilesImpl();
                            cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                            var cssResolver = new StyleAttrCSSResolver(cssFiles);
                            cssResolver.AddCss(@"code { padding: 2px 4px; }", "utf-8", true);
                            var charset = Encoding.UTF8;
                            var hpc     = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider()));
                            hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors);     // inject the tagProcessors
                            var htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, writer));
                            var pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
                            var worker       = new XMLWorker(pipeline, true);
                            var xmlParser    = new XMLParser(true, worker, charset);

                            xmlParser.Parse(new StringReader(html));
                        }
                        catch (Exception ex)
                        {
                            var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                            tagProcessors.RemoveProcessor(HTML.Tag.IMG);                             // remove the default processor
                            tagProcessors.AddProcessor(HTML.Tag.IMG, new CustomImageTagProcessor()); // use our new processor

                            CssFilesImpl cssFiles = new CssFilesImpl();
                            cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                            var cssResolver = new StyleAttrCSSResolver(cssFiles);
                            cssResolver.AddCss(@"code { padding: 2px 4px; }", "utf-8", true);
                            var charset = Encoding.UTF8;
                            var hpc     = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider()));
                            hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors); // inject the tagProcessors
                            var htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, writer));
                            var pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
                            var worker       = new XMLWorker(pipeline, true);
                            var xmlParser    = new XMLParser(true, worker, charset);
                            xmlParser.Parse(new StringReader("<p>Some Content Failed to Load!</p>"));
                        }
                        finally
                        {
                            doc.Close();
                        }
                    }
                }
                bytes = ms.ToArray();
            }


            using (var reader = new PdfReader(bytes))
            {
                using (var ms = new MemoryStream())
                {
                    using (var stamper = new PdfStamper(reader, ms))
                    {
                        int PageCount = reader.NumberOfPages;
                        for (int i = 1; i <= PageCount; i++)
                        {
                            ColumnText.ShowTextAligned(stamper.GetOverContent(i), Element.ALIGN_RIGHT, new Phrase(String.Format("Page {0} of {1}", i, PageCount), new Font(Font.FontFamily.HELVETICA, 8)), 560, 10, 0);
                        }
                    }
                    bytes = ms.ToArray();
                }
            }
            return(new FileContentResult(bytes, "application/pdf"));
        }
예제 #13
0
        public FileContentResult PDFViewMultiple <T>(List <T> models, string viewPath, string Page = "Potrait")
        {
            List <byte[]> listBytes   = new List <byte[]>();
            int           CheckModels = 0;

            TSS_SurveyDocument GetFirstSurvey  = models[0] as TSS_SurveyDocument;
            string             SiteSubCategory = GetFirstSurvey.SubCategory;

            float marginTop = 220;

            foreach (var model in models)
            {
                CheckModels++;
                TSS_SurveyDocument TempModel = model as TSS_SurveyDocument;

                var Title = TempModel.SurveyTitle + " " + TempModel.SiteCode.ToString();
                TempModel.ChecklistCount = CheckModels;
                var    html = WebUtility.HtmlDecode(GetHtml(TempModel, viewPath));
                byte[] bytes;
                using (var ms = new MemoryStream())
                {
                    using (var doc = new Document(iTextSharp.text.PageSize.A4.Rotate(), 10, 10, marginTop, 10))
                    {
                        using (var writer = PdfWriter.GetInstance(doc, ms))
                        {
                            doc.Open();
                            try
                            {
                                doc.NewPage();
                                doc.SetPageSize(PageSize.A4.Rotate());
                                var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                                tagProcessors.RemoveProcessor(HTML.Tag.IMG);                             // remove the default processor
                                tagProcessors.AddProcessor(HTML.Tag.IMG, new CustomImageTagProcessor()); // use our new processor

                                CssFilesImpl cssFiles = new CssFilesImpl();
                                cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                                var cssResolver = new StyleAttrCSSResolver(cssFiles);
                                cssResolver.AddCss(@"code { padding: 2px 4px; }", "utf-8", true);
                                var charset = Encoding.UTF8;
                                var hpc     = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider()));
                                hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors); // inject the tagProcessors
                                var htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, writer));
                                var pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
                                var worker       = new XMLWorker(pipeline, true);
                                var xmlParser    = new XMLParser(true, worker, charset);

                                xmlParser.Parse(new StringReader(html));
                            }
                            catch (Exception Ex)
                            {
                                doc.NewPage();
                                doc.SetPageSize(PageSize.A4.Rotate());
                                var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                                tagProcessors.RemoveProcessor(HTML.Tag.IMG);                             // remove the default processor
                                tagProcessors.AddProcessor(HTML.Tag.IMG, new CustomImageTagProcessor()); // use our new processor

                                CssFilesImpl cssFiles = new CssFilesImpl();
                                cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                                var cssResolver = new StyleAttrCSSResolver(cssFiles);
                                cssResolver.AddCss(@"code { padding: 2px 4px; }", "utf-8", true);
                                var charset = Encoding.UTF8;
                                var hpc     = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider()));
                                hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors); // inject the tagProcessors
                                var htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, writer));
                                var pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
                                var worker       = new XMLWorker(pipeline, true);
                                var xmlParser    = new XMLParser(true, worker, charset);
                                xmlParser.Parse(new StringReader("<p>Content Load Failed!</p>"));
                            }
                            finally
                            {
                                doc.Close();
                            }
                        }
                    }

                    bytes = ms.ToArray();
                }


                using (var reader = new PdfReader(bytes))
                {
                    using (var ms = new MemoryStream())
                    {
                        using (var stamper = new PdfStamper(reader, ms))
                        {
                            int PageCount = reader.NumberOfPages;
                            for (int i = 1; i <= PageCount; i++)
                            {
                                if (SiteSubCategory.ToUpper() == "CRAN" || SiteSubCategory.ToUpper() == "AIRSCALE")
                                {
                                    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(Server.MapPath("~/Content/Images/ClientLogo/verizon_logo_mini.png"));
                                    var pdfContentByte          = stamper.GetOverContent(i);
                                    image.SetAbsolutePosition(305, 495);
                                    pdfContentByte.AddImage(image);
                                }
                                else
                                {
                                    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(Server.MapPath("~/Content/Images/ClientLogo/rsz_amp-slide-bkg.jpg"));
                                    var pdfContentByte          = stamper.GetOverContent(i);
                                    image.SetAbsolutePosition(285, 465);
                                    pdfContentByte.AddImage(image);
                                }


                                if (listBytes.Count == 0)
                                {
                                    if (i != 1)
                                    {
                                        //ColumnText.ShowTextAligned(stamper.GetOverContent(i), Element.ALIGN_CENTER,
                                        //    new Phrase(Title, new Font(Font.FontFamily.UNDEFINED, 15, Font.BOLD)), 420, 430, 0);
                                    }
                                    else
                                    {
                                        if (SiteSubCategory.ToUpper() == "MICROWAVE" || SiteSubCategory.ToUpper() == "CORRECTION" || SiteSubCategory.ToUpper() == "MAINTENANCE" || SiteSubCategory.ToUpper() == "LOS COP" || SiteSubCategory.ToUpper() == "FASTBACK")
                                        {
                                            ColumnText.ShowTextAligned(stamper.GetOverContent(i), Element.ALIGN_CENTER,
                                                                       new Phrase("Completed by AMP Communications LLC", new Font(Font.FontFamily.UNDEFINED, 15, Font.BOLD)), 430, 20, 0);
                                        }
                                    }
                                }
                                else
                                {
                                    //ColumnText.ShowTextAligned(stamper.GetOverContent(i), Element.ALIGN_CENTER,
                                    //       new Phrase(Title, new Font(Font.FontFamily.UNDEFINED, 15, Font.BOLD)), 420, 430, 0);
                                }
                                //ColumnText.ShowTextAligned(stamper.GetOverContent(i), Element.ALIGN_RIGHT, new Phrase(String.Format("Page {0} of {1}", i, PageCount), new Font(Font.FontFamily.HELVETICA, 8)), 760, 10, 0);
                            }
                        }
                        listBytes.Add(ms.ToArray());
                    }
                }
            }
            byte[] Multiplebytes = CombineMultipleByteArrays(listBytes);

            return(new FileContentResult(Multiplebytes, "application/pdf"));
        }