示例#1
0
        public byte[] GeneratePdf <T>(Action <PdfWriter, Document> configureSettings, T model = null, string viewName = null) where T : class
        {
            byte[] output;

            var document = Margins == null
                ? new Document()
                : new Document(Margins.PageSize, Margins.Left, Margins.Right, Margins.Top, Margins.Bottom);

            using (document)
            {
                using (var workStream = new MemoryStream())
                {
                    var writer = PdfWriter.GetInstance(document, workStream);
                    writer.CloseStream = false;

                    configureSettings?.Invoke(writer, document);
                    document.Open();

                    var renderedView = Parser.RenderView(viewName, model, Templates);

                    using (var reader = new StringReader(renderedView))
                    {
                        var workerInstance = XMLWorkerHelper.GetInstance();

                        var tagProcessors = Tags.GetHtmlTagProcessorFactory();
                        if (!string.IsNullOrEmpty(ImageBasePath))
                        {
                            tagProcessors.RemoveProcessor(HTML.Tag.IMG);
                            tagProcessors.AddProcessor(new ImageTagProcessor(ImageBasePath), new[] { HTML.Tag.IMG });
                        }

                        var htmlContext = new HtmlPipelineContext(null);

                        htmlContext.SetTagFactory(tagProcessors);

                        var cssResolver = workerInstance.GetDefaultCssResolver(true);
                        var pipeline    = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));

                        var worker = new XMLWorker(pipeline, true);
                        var parser = new XMLParser(worker);
                        parser.Parse(reader);

                        document.Close();
                        output = workStream.ToArray();
                    }
                }
            }
            return(output);
        }
        public byte[] Render(string htmlText, string pageTitle, string linkCss, bool horizontal)
        {
            byte[] renderedBuffer;
            using (var outputMemoryStream = new MemoryStream())
            {
                using (var pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin))
                {
                    if (horizontal)
                    {
                        pdfDocument.SetPageSize(PageSize.A4.Rotate());
                    }
                    PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, outputMemoryStream);
                    pdfWriter.CloseStream = false;
                    pdfWriter.PageEvent   = new PrintHeaderFooter {
                        Title = pageTitle
                    };
                    pdfDocument.Open();

                    // register all fonts in current computer
                    FontFactory.RegisterDirectories();


                    // Set factories
                    var htmlContext = new HtmlPipelineContext(null);
                    htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
                    // Set css
                    ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
                    cssResolver.AddCssFile(HttpContext.Current.Server.MapPath(linkCss), true);
                    cssResolver.AddCss(".shadow {background-color: #ebdddd; }", true);


                    //Export
                    IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDocument, pdfWriter)));

                    using (var xmlString = new StringReader(htmlText))
                    {
                        var worker   = new XMLWorker(pipeline, true);
                        var xmlParse = new XMLParser(true, worker);
                        xmlParse.Parse(xmlString);
                        xmlParse.Flush();
                    }
                }

                renderedBuffer = new byte[outputMemoryStream.Position];
                outputMemoryStream.Position = 0;
                outputMemoryStream.Read(renderedBuffer, 0, renderedBuffer.Length);
            }
            return(renderedBuffer);
        }
示例#3
0
        /*
         * (non-Javadoc)
         *
         * @see
         * com.itextpdf.tool.xml.ITagProcessor#endElement(com.itextpdf.tool.xml.Tag,
         * java.util.List, com.itextpdf.text.Document)
         */
        public override IList <IElement> End(IWorkerContext ctx, Tag tag, IList <IElement> currentContent)
        {
            IDictionary <String, String> attributes = tag.Attributes;
            String src;

            attributes.TryGetValue(HTML.Attribute.SRC, out src);
            iTextSharp.text.Image img = null;
            IList <IElement>      l   = new List <IElement>(1);

            if (!string.IsNullOrEmpty(src))
            {
                src = XMLUtil.UnescapeXML(src);
                src = src.Trim();
                // check if the image was already added once
                try {
                    if (logger.IsLogging(Level.TRACE))
                    {
                        logger.Trace(String.Format(LocaleMessages.GetInstance().GetMessage(LocaleMessages.HTML_IMG_USE), src));
                    }
                    try {
                        img = new ImageRetrieve(GetHtmlPipelineContext(ctx).GetImageProvider()).RetrieveImage(src);
                    } catch (NoImageProviderException) {
                        img = new ImageRetrieve().RetrieveImage(src);
                    }
                } catch (IOException e) {
                    if (logger.IsLogging(Level.ERROR))
                    {
                        logger.Error(String.Format(LocaleMessages.GetInstance().GetMessage(LocaleMessages.HTML_IMG_RETRIEVE_FAIL), src), e);
                    }
                } catch (NoImageException e) {
                    if (logger.IsLogging(Level.ERROR))
                    {
                        logger.Error("", e);
                    }
                } catch (NoCustomContextException e) {
                    throw new RuntimeWorkerException(LocaleMessages.GetInstance().GetMessage(LocaleMessages.NO_CUSTOM_CONTEXT), e);
                }
                if (null != img)
                {
                    try {
                        HtmlPipelineContext htmlPipelineContext = GetHtmlPipelineContext(ctx);
                        l.Add(GetCssAppliers().Apply(new Chunk((iTextSharp.text.Image)GetCssAppliers().Apply(img, tag, htmlPipelineContext), 0, 0, true), tag, htmlPipelineContext));
                    } catch (NoCustomContextException e) {
                        throw new RuntimeWorkerException(e);
                    }
                }
            }
            return(l);
        }
示例#4
0
        public byte[] GeneratePDF2(string name)
        {
            byte[] result;
            string Path = AppDomain.CurrentDomain.BaseDirectory;

            Path = Path.Substring(0, Path.Length - 10);
            var           Pathcss = string.Format("{0}{1}", Path, "htmltoPdf\\Content\\bootstrap.min.css");
            List <string> cssFile = new List <string>();

            cssFile.Add(Pathcss);
            MemoryStream stream = null;

            string Html             = html();
            string ModifiedFileName = string.Empty;

            using (stream = new MemoryStream())
            {
                Document  pdfDoc = new Document(PageSize.A4, 60f, 60f, 50f, 40f);
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
                writer.PageEvent = new NumPage();
                pdfDoc.Open();
                HtmlPipelineContext htmlcontext = new HtmlPipelineContext(null);

                htmlcontext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

                ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
                cssResolver.AddCssFile(Pathcss, true);
                //cssFile.ForEach(x=>cssResolver.AddCssFile(x,true));

                IPipeline pipeline = new CssResolverPipeline(cssResolver,
                                                             new HtmlPipeline(htmlcontext, new PdfWriterPipeline(pdfDoc, writer)));


                XMLWorker worker    = new XMLWorker(pipeline, true);
                XMLParser xmlparser = new XMLParser(worker);
                xmlparser.Parse(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(Html)));

                pdfDoc.Close();

                result = stream.GetBuffer();
                //PdfReader reader = new PdfReader(stream);

                //PdfEncryptor.Encrypt(reader, new FileStream(ModifiedFileName, FileMode.Append), PdfWriter.STRENGTH128BITS, "", "", iTextSharp.text.pdf.PdfWriter.AllowPrinting);
                //reader.Close();
                //return File(stream.ToArray(), "application/pdf", "Grid.pdf");
            }
            return(result);
        }
示例#5
0
        /// <summary>
        /// Converts the specified view name and data model to a PDF.
        /// </summary>
        /// <param name="viewName">The name of the view to convert to PDF.</param>
        /// <param name="dataModel">The data model to use.</param>
        /// <param name="pageSize">The size of the page to create.</param>
        /// <returns>The raw data of the PDF as a byte array.</returns>
        protected virtual byte[] PdfBytes(string viewName, object dataModel, Rectangle pageSize)
        {
            if (String.IsNullOrEmpty(viewName))
            {
                viewName = ControllerContext.RouteData.Values["action"].ToString();
            }
            using (var document = new Document()) {
                if (pageSize == null)
                {
                    pageSize = PageSize.LETTER;
                }
                document.SetPageSize(pageSize);
                using (var ms = new MemoryStream()) {
                    PdfWriter writer = PdfWriter.GetInstance(document, ms);
                    writer.CloseStream = false;
                    document.Open();
                    using (var sw = new StringWriter()) {
                        ViewData.Model = dataModel;
                        var viewEngine      = (ICompositeViewEngine)HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine));
                        var contextAccessor = (IActionContextAccessor)HttpContext.RequestServices.GetService(typeof(IActionContextAccessor));
                        var viewResult      = viewEngine.FindView(contextAccessor.ActionContext, viewName, true);
                        var viewContext     = new ViewContext(contextAccessor.ActionContext, viewResult.View, ViewData, TempData, sw, new HtmlHelperOptions());
                        var viewTask        = viewResult.View.RenderAsync(viewContext);
                        viewTask.Wait();
                        using (var reader = new StringReader(sw.ToString())) {
                            var tagProcessors = (DefaultTagProcessorFactory)Tags.GetHtmlTagProcessorFactory();
                            tagProcessors.RemoveProcessor(HTML.Tag.IMG);                               // remove the default processor
                            tagProcessors.AddProcessor(HTML.Tag.IMG, new EmbeddedImageTagProcessor()); // use our new processor

                            CssFilesImpl cssFiles = new CssFilesImpl();
                            cssFiles.Add(XMLWorkerHelper.GetInstance().GetDefaultCSS());
                            var cssResolver = new StyleAttrCSSResolver(cssFiles);
                            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);
                            //XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);
                            xmlParser.Parse(reader);
                            document.Close();
                            return(ms.ToArray());
                        }
                    }
                }
            }
        }
            public override IList <IElement> End(IWorkerContext ctx, Tag tag, IList <IElement> currentContent)
            {
                try
                {
                    IDictionary <string, string> attributes = tag.Attributes;
                    string src;
                    if (!attributes.TryGetValue(HTML.Attribute.SRC, out src))
                    {
                        return(new List <IElement>(1));
                    }
                    if (string.IsNullOrEmpty(src))
                    {
                        return(new List <IElement>(1));
                    }
                    if (src.StartsWith("data:image/", StringComparison.InvariantCultureIgnoreCase))
                    {
                        // data:[][;charset=][;base64],
                        string base64Data           = src.Substring(src.IndexOf(",") + 1);
                        byte[] imagedata            = Convert.FromBase64String(base64Data);
                        iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagedata);

                        List <IElement>     list = new List <IElement>();
                        HtmlPipelineContext htmlPipelineContext = GetHtmlPipelineContext(ctx);
                        list.Add(
                            GetCssAppliers().Apply(
                                new Chunk(
                                    (iTextSharp.text.Image)GetCssAppliers().Apply(image, tag, htmlPipelineContext)
                                    , 0
                                    , 0
                                    , true
                                    )
                                , tag
                                , htmlPipelineContext
                                ) //GetCssAppliers
                            );    //list.Add
                        return(list);
                    }//if
                    else
                    {
                        return(base.End(ctx, tag, currentContent));
                    }//else
                }
                catch (Exception ex)
                {
                    LogTool.SaveLogMessage(ex, "CustomImageTagProcessor");
                }
                return(base.End(ctx, tag, currentContent));
            } //End
示例#7
0
        private static bool GeneratePdf(string htmlText, string fileFullName, string watermarkText, PdfFont font)
        {
            if (string.IsNullOrEmpty(htmlText))
            {
                return(false);
            }

            htmlText = "<p>" + htmlText + "</p>";

            var document = new Document();
            var writer   = PdfWriter.GetInstance(document, new FileStream(fileFullName, FileMode.Create));

            if (!string.IsNullOrEmpty(watermarkText))
            {
                writer.PageEvent = new PdfWatermarkPageEvent(watermarkText);
            }

            document.Open();

            //pipeline
            var htmlContext = new HtmlPipelineContext(null);

            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            htmlContext.SetImageProvider(new ChannelImageProvider());

            htmlContext.SetCssAppliers(new CssAppliersImpl(GetFontProviderBy(font)));
            var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
            var pipeline    = new CssResolverPipeline(cssResolver,
                                                      new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));

            //parse
            byte[] data    = Encoding.UTF8.GetBytes(htmlText);
            var    msInput = new MemoryStream(data);
            var    worker  = new XMLWorker(pipeline, true);
            var    parser  = new XMLParser(worker);

            parser.Parse(msInput); //XMLWorkerHelper.GetInstance().ParseXHtml(..)
            var pdfDest = new PdfDestination(PdfDestination.XYZ, 0, document.PageSize.Height, 1f);
            var action  = PdfAction.GotoLocalPage(1, pdfDest, writer);

            writer.SetOpenAction(action);

            //close
            document.Close();
            msInput.Close();

            return(true);
        }
        /**
         * @param d the ElementHandler
         * @param inp the Stream
         * @throws IOException if something went seriously wrong with IO.
         */
        public void ParseXHtml(IElementHandler d, Stream inp, Encoding charset)
        {
            CssFilesImpl cssFiles = new CssFilesImpl();

            cssFiles.Add(GetDefaultCSS());
            StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(cssFiles);
            HtmlPipelineContext  hpc         = new HtmlPipelineContext();

            hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(GetDefaultTagProcessorFactory());
            IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(hpc, new ElementHandlerPipeline(d,
                                                                                                                       null)));
            XMLWorker worker = new XMLWorker(pipeline, true);
            XMLParser p      = new XMLParser(true, worker, charset);

            p.Parse(inp);
        }
示例#9
0
        /*
         * (non-Javadoc)
         *
         * @see
         * com.itextpdf.tool.xml.ITagProcessor#endElement(com.itextpdf.tool.xml.Tag,
         * java.util.List, com.itextpdf.text.Document)
         */
        public override IList <IElement> End(IWorkerContext ctx, Tag tag, IList <IElement> currentContent)
        {
            HtmlCell         cell = new HtmlCell();
            IList <IElement> l    = new List <IElement>(1);

            foreach (IElement e in currentContent)
            {
                cell.AddElement(e);
            }
            try {
                HtmlPipelineContext htmlPipelineContext = GetHtmlPipelineContext(ctx);
                l.Add(new HtmlCellCssApplier().Apply(cell, tag, htmlPipelineContext, htmlPipelineContext));
            } catch (NoCustomContextException e1) {
                throw new RuntimeWorkerException(LocaleMessages.GetInstance().GetMessage(LocaleMessages.NO_CUSTOM_CONTEXT), e1);
            }
            return(l);
        }
示例#10
0
        /**
         * Parses the xml data. This method configures the XMLWorker to parse
         * (X)HTML/CSS and accept unknown tags. Writes the output in the given
         * PdfWriter with the given document.
         *
         * @param writer the PdfWriter
         * @param doc the Document
         * @param inp the reader
         * @throws IOException thrown when something went wrong with the IO
         */
        virtual public void ParseXHtml(PdfWriter writer, Document doc, TextReader inp)
        {
            CssFilesImpl cssFiles = new CssFilesImpl();

            cssFiles.Add(GetDefaultCSS());
            StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(cssFiles);
            HtmlPipelineContext  hpc         = new HtmlPipelineContext(null);

            hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(GetDefaultTagProcessorFactory());
            IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(hpc, new PdfWriterPipeline(doc,
                                                                                                                  writer)));
            XMLWorker worker = new XMLWorker(pipeline, true);
            XMLParser p      = new XMLParser();

            p.AddListener(worker);
            p.Parse(inp);
        }
示例#11
0
        virtual public void SetUp()
        {
            body   = new Tag("body", new Dictionary <String, String>());
            table  = new Tag("table", new Dictionary <String, String>());
            row    = new Tag("tr", new Dictionary <String, String>());
            cell   = new Tag("td", new Dictionary <String, String>());
            config = new HtmlPipelineContext(null);
            calc   = new WidthCalculator();

            LoggerFactory.GetInstance().SetLogger(new SysoLogger(3));
            body.AddChild(table);
            table.Parent = body;
            table.AddChild(row);
            row.Parent = table;
            row.AddChild(cell);
            cell.Parent = row;
        }
        virtual public void SetUp()
        {
            LoggerFactory.GetInstance().SetLogger(new SysoLogger(3));
            cssFiles = new CssFilesImpl();
            String path = RESOURCES + @"\css\test.css";

            path = path.Substring(0, path.LastIndexOf("test.css"));
            FileRetrieveImpl     r           = new FileRetrieveImpl(new String[] { path });
            StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(cssFiles, r);
            HtmlPipelineContext  hpc         = new HtmlPipelineContext(null);

            hpc.SetAcceptUnknown(false).AutoBookmark(true).SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(hpc, null));
            XMLWorker worker   = new XMLWorker(pipeline, true);

            p = new XMLParser(worker);
        }
示例#13
0
文件: PdfTools.cs 项目: niodad/Gitos
        public static byte[] WriteHtmlToPdf(string htmlString, string css)
        {
            byte[] bytes;
            //Boilerplate iTextSharp setup here
            //Create a stream that we can write to, in this case a MemoryStream
            using (var ms = new MemoryStream())
            {
                //Create an iTextSharp Document which is an abstraction of a PDF but **NOT** a PDF
                using (var doc = new Document())
                {
                    //Create a writer that's bound to our PDF abstraction and our stream
                    using (var writer = PdfWriter.GetInstance(doc, ms))
                    {
                        doc.Open();

                        var tagProcessorFactory = Tags.GetHtmlTagProcessorFactory();

                        var htmlPipelineContext = new HtmlPipelineContext(null);
                        htmlPipelineContext.SetTagFactory(tagProcessorFactory);
                        var pdfWriterPipeline = new PdfWriterPipeline(doc, writer);
                        var htmlPipeline      = new HtmlPipeline(htmlPipelineContext, pdfWriterPipeline);

                        // get an ICssResolver and add the custom CSS
                        var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
                        cssResolver.AddCss(css, "utf-8", true);
                        var cssResolverPipeline = new CssResolverPipeline(
                            cssResolver, htmlPipeline
                            );


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

                        {
                            parser.Parse(sr);

                            //XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, sr);
                        }
                        doc.Close();
                    }
                    bytes = ms.ToArray();
                }
                return(bytes);
            }
        }
        virtual public void AddingALinkProvider()
        {
            Document  doc    = new Document(PageSize.A4);
            PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(TARGET + "columbus3.pdf", FileMode.Create));

            doc.Open();
            HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);

            htmlContext.SetLinkProvider(new CustomLinkProvider()).SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
            IPipeline    pipeline    = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext,
                                                                                             new PdfWriterPipeline(doc, writer)));
            XMLWorker worker = new XMLWorker(pipeline, true);
            XMLParser p      = new XMLParser(worker);

            p.Parse(File.OpenRead(RESOURCES + @"\examples\columbus.html"));
            doc.Close();
        }
示例#15
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");
        }
        protected byte[] RenderHtmlToPDF(string Html)
        {
            // http://stackoverflow.com/questions/36180131/using-itextsharp-xmlworker-to-convert-html-to-pdf-and-write-text-vertically
            // http://stackoverflow.com/questions/20488045/change-default-font-and-fontsize-in-pdf-using-itextsharp

            Document document = new Document(PageSize.A4, 50f, 30f, 40f, 90f);

            if (Html.Contains("class=\"landscape\""))
            {
                document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
            }

            MemoryStream stream = new MemoryStream();
            TextReader   reader = new StringReader(Html);
            PdfWriter    writer = PdfWriter.GetInstance(document, stream);

            document.AddTitle("muster ag");

            XMLWorkerFontProvider fonts    = new XMLWorkerFontProvider();
            CssAppliers           appliers = new CssAppliersImpl(fonts);

            HtmlPipelineContext context = new HtmlPipelineContext(appliers);

            context.SetAcceptUnknown(true);
            context.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

            PdfWriterPipeline pdfpipeline  = new PdfWriterPipeline(document, writer);
            HtmlPipeline      htmlpipeline = new HtmlPipeline(context, pdfpipeline);

            var resolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);

            resolver.AddCssFile(Server.MapPath("~/Content/inv.pdf.css"), true);
            CssResolverPipeline csspipeline = new CssResolverPipeline(resolver, htmlpipeline);

            XMLWorker worker = new XMLWorker(csspipeline, true);
            XMLParser parser = new XMLParser(worker);

            document.Open();
            parser.Parse(reader);
            worker.Close();
            document.Close();

            return(stream.ToArray());
        }
示例#17
0
        /// <summary>
        /// CREATE A PDF FILE FROM BOTH VALID HTML AND CSS SOURCES
        /// </summary>
        /// <param name="htmlContent">A Well Formed html Document. IMAGE PATH MUST BE LOADED AT RUNTIME.  </param>
        /// <param name="cssPath">Path to a valid css file</param>
        /// <param name="resultsFilePath">Output path to the resulting pdf</param>
        public static void GetPDFFile(string htmlContent, string cssPath, string resultsFilePath)
        {
            //-----------------------------------------------
            // INICIAR VARIABLES
            //-----------------------------------------------
            List <string> cssFiles = new List <string>();

            cssFiles.Add(cssPath);

            var output   = new MemoryStream();
            var input    = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent));
            var document = new Document();
            var writer   = PdfWriter.GetInstance(document, output);

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

            //-----------------------------------------------
            // AÑADIR Y ANALIZAR CSS + HTML
            //-----------------------------------------------
            var htmlContext = new HtmlPipelineContext(null);

            htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory());

            ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);

            cssFiles.ForEach(i => cssResolver.AddCssFile(i, true));

            var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
            var worker   = new XMLWorker(pipeline, true);
            var p        = new XMLParser(worker);

            p.Parse(input);
            document.Close();
            output.Position = 0;

            //-----------------------------------------------
            // GUARDAR ARCHIVO
            //-----------------------------------------------
            using (FileStream file = new FileStream(resultsFilePath, FileMode.Create, FileAccess.Write))
            {
                output.WriteTo(file);
            }
        }
示例#18
0
        private void CreatePdfFromHtmlString(string HtmlTemplate, string DestinationPath)
        {
            Document doc = new Document();

            var fontFile = Server.MapPath("~/fonts/ARIALUNI.ttf");

            try
            {
                var FS = new System.IO.FileStream(DestinationPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);

                var document = new Document();

                var writer = PdfWriter.GetInstance(document, FS);

                document.Open();

                var cssResolver  = new StyleAttrCSSResolver();
                var fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
                fontProvider.Register(fontFile);
                var cssAppliers = new CssAppliersImpl(fontProvider);
                var htmlContext = new HtmlPipelineContext(cssAppliers);
                htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

                var pdf  = new PdfWriterPipeline(document, writer);
                var html = new HtmlPipeline(htmlContext, pdf);
                var css  = new CssResolverPipeline(cssResolver, html);

                var worker = new XMLWorker(css, true);
                var p      = new XMLParser(worker);

                var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(HtmlTemplate));

                var sr = new StreamReader(ms);

                p.Parse(sr);

                document.Close();
            }
            catch (Exception e)
            {
                throw;
            }
        }
示例#19
0
        private XMLWorker CreateXmlWorker(Document doc, PdfWriter writer)
        {
            var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);

            cssResolver.AddCss(content: css, isPersistent: true);

            var htmlContext = new HtmlPipelineContext(null);

            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            htmlContext.SetImageProvider(imageProvider);

            var pdfPipeline  = new PdfWriterPipeline(doc, writer);
            var htmlPipeline = new HtmlPipeline(htmlContext, pdfPipeline);
            var cssPipeline  = new CssResolverPipeline(cssResolver, htmlPipeline);

            var worker = new XMLWorker(cssPipeline, true);

            return(worker);
        }
示例#20
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));
        }
示例#21
0
        /* (non-Javadoc)
         * @see com.itextpdf.tool.xml.ITagProcessor#endElement(com.itextpdf.tool.xml.Tag, java.util.List, com.itextpdf.text.Document)
         */
        public override IList <IElement> End(IWorkerContext ctx, Tag tag, IList <IElement> currentContent)
        {
            List <IElement> l = new List <IElement>(1);

            if (currentContent.Count > 0)
            {
                IList <IElement> currentContentToParagraph = CurrentContentToParagraph(currentContent, true, true, tag, ctx);
                foreach (IElement p in currentContentToParagraph)
                {
                    ((Paragraph)p).Role = (getHeaderRole(GetLevel(tag)));
                }
                ParentTreeUtil pt = new ParentTreeUtil();
                try {
                    HtmlPipelineContext context = GetHtmlPipelineContext(ctx);

                    bool oldBookmark = context.AutoBookmark();
                    if (pt.GetParentTree(tag).Contains(HTML.Tag.TD))
                    {
                        context.AutoBookmark(false);
                    }

                    if (context.AutoBookmark())
                    {
                        Paragraph title = new Paragraph();
                        foreach (IElement w in currentContentToParagraph)
                        {
                            title.Add(w);
                        }

                        l.Add(new WriteH(context, tag, this, title));
                    }

                    context.AutoBookmark(oldBookmark);
                } catch (NoCustomContextException e) {
                    if (LOGGER.IsLogging(Level.ERROR))
                    {
                        LOGGER.Error(LocaleMessages.GetInstance().GetMessage(LocaleMessages.HEADER_BM_DISABLED), e);
                    }
                }
                l.AddRange(currentContentToParagraph);
            }
            return(l);
        }
示例#22
0
        protected override void MakePdf(string outPdf)
        {
            Document doc = new Document(PageSize.A3.Rotate());

            PdfWriter pdfWriter = PdfWriter.GetInstance(doc, new FileStream(outPdf, FileMode.Create));

            pdfWriter.CreateXmpMetadata();

            doc.SetMargins(200, 200, 0, 0);
            doc.Open();


            CssFilesImpl cssFiles = new CssFilesImpl();

            cssFiles.Add(
                XMLWorkerHelper.GetCSS(
                    File.OpenRead(RESOURCES + Path.DirectorySeparatorChar + testPath + Path.DirectorySeparatorChar + testName +
                                  Path.DirectorySeparatorChar + "complexDiv_files" + Path.DirectorySeparatorChar +
                                  "main.css")));
            cssFiles.Add(
                XMLWorkerHelper.GetCSS(
                    File.OpenRead(RESOURCES + Path.DirectorySeparatorChar + testPath + Path.DirectorySeparatorChar + testName +
                                  Path.DirectorySeparatorChar + "complexDiv_files" + Path.DirectorySeparatorChar +
                                  "widget082.css")));
            StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(cssFiles);
            HtmlPipelineContext  hpc         =
                new HtmlPipelineContext(
                    new CssAppliersImpl(new XMLWorkerFontProvider(RESOURCES + @"\tool\xml\examples\fonts")));

            hpc.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            hpc.SetImageProvider(new SampleTestImageProvider());
            hpc.SetPageSize(doc.PageSize);
            HtmlPipeline htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(doc, pdfWriter));
            IPipeline    pipeline     = new CssResolverPipeline(cssResolver, htmlPipeline);
            XMLWorker    worker       = new XMLWorker(pipeline, true);
            XMLParser    p            = new XMLParser(true, worker, Encoding.GetEncoding("UTF-8"));

            p.Parse(File.OpenRead(inputHtml), Encoding.GetEncoding("UTF-8"));
            //ICC_Profile icc = ICC_Profile.getInstance(ComplexDiv01Test.class.getResourceAsStream("sRGB Color Space Profile.icm"));
            //pdfWriter.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
            doc.Close();
        }
示例#23
0
        public byte[] GetPdfBytesArray(string html)
        {
            var tempHtml = html;
            var cssLinks = html.GetCssLinks().ToList();

            if (cssLinks.Count > 0)
            {
                tempHtml = tempHtml.RemoveCssLink();
            }
            tempHtml = tempHtml.FormatImageLinks();

            using (var ms = new MemoryStream())
                using (var document = new Document(DocPageSize, 10, 10, 5, 0))
                {
                    using (var writer = PdfWriter.GetInstance(document, ms))
                    {
                        document.Open();
                        using (TextReader xmlString = new StringReader(tempHtml))
                        {
                            //Set factories
                            var htmlContext = new HtmlPipelineContext(null);
                            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
                            //Set css
                            var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
                            foreach (var item in cssLinks)
                            {
                                cssResolver.AddCssFile(item, true);
                            }

                            //Export
                            IPipeline pipeline = new CssResolverPipeline(cssResolver,
                                                                         new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
                            var worker   = new XMLWorker(pipeline, true);
                            var xmlParse = new XMLParser(true, worker);
                            xmlParse.Parse(xmlString);
                            xmlParse.Flush();
                        }
                        document.Close();
                    }
                    return(ms.ToArray());
                }
        }
        virtual public void SetUp()
        {
            LoggerFactory.GetInstance().SetLogger(new SysoLogger(3));
            root  = new Tag("body");
            p     = new Tag("p");
            ul    = new Tag("ul");
            first = new Tag("li");
            last  = new Tag("li");

            single = new ListItem("Single");
            start  = new ListItem("Start");
            end    = new ListItem("End");

            listWithOne          = new List <IElement>();
            listWithTwo          = new List <IElement>();
            orderedUnorderedList = new OrderedUnorderedList();
            CssAppliersImpl cssAppliers = new CssAppliersImpl();

            orderedUnorderedList.SetCssAppliers(cssAppliers);
            workerContextImpl = new WorkerContextImpl();
            HtmlPipelineContext context2 = new HtmlPipelineContext(cssAppliers);

            workerContextImpl.Put(typeof(HtmlPipeline).FullName, context2);
            root.AddChild(p);
            root.AddChild(ul);
            ul.AddChild(first);
            ul.AddChild(last);
            p.CSS["font-size"]     = "12pt";
            p.CSS["margin-top"]    = "12pt";
            p.CSS["margin-bottom"] = "12pt";
            new ParagraphCssApplier(cssAppliers).Apply(new Paragraph("paragraph"), p, context2);
            first.CSS["margin-top"]     = "50pt";
            first.CSS["padding-top"]    = "25pt";
            first.CSS["margin-bottom"]  = "50pt";
            first.CSS["padding-bottom"] = "25pt";
            last.CSS["margin-bottom"]   = "50pt";
            last.CSS["padding-bottom"]  = "25pt";
            listWithOne.Add(single);
            listWithTwo.Add(start);
            listWithTwo.Add(end);
        }
示例#25
0
    public override IList <IElement> End(IWorkerContext ctx, Tag tag, IList <IElement> currentContent)
    {
        var src    = tag.Attributes["src"];
        var bitmap = (Bitmap)Resources.ResourceManager.GetObject(src);

        if (bitmap == null)
        {
            throw new RuntimeWorkerException("No resource with the name: " + src);
        }
        var converter = new ImageConverter();
        var image     = Image.GetInstance((byte[])converter.ConvertTo(bitmap, typeof(byte[])));
        HtmlPipelineContext htmlPipelineContext = this.GetHtmlPipelineContext(ctx);

        return(new List <IElement>(1)
        {
            this.GetCssAppliers().Apply(
                new Chunk((Image)this.GetCssAppliers().Apply(image, tag, htmlPipelineContext), 0f, 0f, true),
                tag,
                htmlPipelineContext)
        });
    }
示例#26
0
        public void SetUp()
        {
            cells     = new List <Element>();
            tag       = new Tag("td", new Dictionary <String, String>());
            basicPara = new NoNewLineParagraph();
            basic     = new Chunk("content");

            cell    = new HtmlCell();
            applier = new HtmlCellCssApplier();


            LoggerFactory.GetInstance().SetLogger(new SysoLogger(3));
            Tag parent = new Tag("tr");

            parent.Parent = new Tag("table");
            tag.Parent    = parent;
            basicPara.Add(basic);
            cell.AddElement(basicPara);
            cells.Add(cell);
            config = new HtmlPipelineContext(null);
        }
示例#27
0
        private static void _add_to_table(Guid applicationId, HttpContext context, PdfPTable mainTable,
                                          StyleAttrCSSResolver cssResolver, WikiPDFText text, Font font, PdfPCell cell = null)
        {
            if (cell == null)
            {
                cell = new PdfPCell();
            }

            cell.Border = 0;
            cell.HorizontalAlignment = Element.ALIGN_JUSTIFIED;
            cell.RunDirection        = text.IsRTL ? PdfWriter.RUN_DIRECTION_RTL : PdfWriter.RUN_DIRECTION_LTR;
            cell.SetLeading(0, 2);

            itsXmlHtml.DefaultTagProcessorFactory tagProcessors =
                (itsXmlHtml.DefaultTagProcessorFactory)itsXmlHtml.Tags.GetHtmlTagProcessorFactory();

            tagProcessors.RemoveProcessor(itsXmlHtml.HTML.Tag.IMG);                                          // remove the default processor
            tagProcessors.AddProcessor(itsXmlHtml.HTML.Tag.IMG, new CustomImageTagProcessor(applicationId)); // use our new processor

            //tagProcessors.AddProcessor(itsXmlHtml.HTML.Tag.TABLE, new TableTagProcessor());

            HtmlPipelineContext htmlContext =
                new HtmlPipelineContext(new itsXmlHtml.CssAppliersImpl(new IranSansFontProvider(font)));

            htmlContext.SetImageProvider(new ImageProvider());
            htmlContext.CharSet(Encoding.UTF8);
            htmlContext.SetAcceptUnknown(true).AutoBookmark(true).SetTagFactory(tagProcessors);

            ElementsCollector   elementsHandler = new ElementsCollector();
            CssResolverPipeline pipeline        = new CssResolverPipeline(cssResolver,
                                                                          new HtmlPipeline(htmlContext, new ElementHandlerPipeline(elementsHandler, null)));

            itsXml.XMLWorker worker = new itsXml.XMLWorker(pipeline, parseHtml: true);
            XMLParser        parser = new XMLParser(true, worker, Encoding.UTF8);

            parser.Parse(new StringReader(text.Text));

            cell.AddElement(elementsHandler.Paragraph);
            mainTable.AddCell(cell);
        }
示例#28
0
        public static byte[] CreatePDF(string htmlContent, string cssPath)
        {
            using (MemoryStream stream = new System.IO.MemoryStream())
            {
                Document  pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
                pdfDoc.Open();

                HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
                htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
                ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
                cssResolver.AddCssFile(cssPath, true);

                IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDoc, writer)));

                XMLWorker worker = new XMLWorker(pipeline, true);
                XMLParser parser = new XMLParser(worker);
                parser.Parse(new MemoryStream(Encoding.UTF8.GetBytes(htmlContent)));
                pdfDoc.Close();
                return(stream.GetBuffer());
            }
        }
示例#29
0
        public ActionResult generaPDF()
        {
            using (MemoryStream stream = new MemoryStream())
            {
                StringWriter stringWriter = new StringWriter();
                System.Web.HttpContext.Current.Response.Clear();
                ViewEngineResult viewEngineResult = ViewEngines.Engines.FindView(controllerContext, vistaReporte, null);
                ViewContext      viewContext      = new ViewContext(controllerContext, viewEngineResult.View, new ViewDataDictionary(model), temporalData, stringWriter);
                viewEngineResult.View.Render(viewContext, stringWriter);
                String HtmlString = stringWriter.ToString();

                List <string> cssFiles = new List <string>();
                cssFiles.Add("~/Content/Styles/Site/Site.css");
                cssFiles.Add("~/Content/Styles/Account/all.css");
                cssFiles.Add("~/Content/Librerias/JQuery.UI/jquery-ui.theme.css");
                cssFiles.Add("~/Content/Librerias/JQuery.UI/jquery-ui.structure.css");
                cssFiles.Add("~/Content/Styles/Site/ReportesPDF.css");

                Document     Pdf          = new Document(PageSize.A4);
                StringReader stringReader = new StringReader(HtmlString);
                PdfWriter    write        = PdfWriter.GetInstance(Pdf, stream);
                write.CloseStream = false;
                Pdf.Open();
                HtmlPipelineContext htmlPipelineContext = new HtmlPipelineContext(null);
                htmlPipelineContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
                ICSSResolver iCSSResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
                cssFiles.ForEach(x => iCSSResolver.AddCssFile(System.Web.HttpContext.Current.Server.MapPath(x), true));
                IPipeline pipeline        = new CssResolverPipeline(iCSSResolver, new HtmlPipeline(htmlPipelineContext, new PdfWriterPipeline(Pdf, write)));
                XMLWorker xMLWorkerHelper = new XMLWorker(pipeline, true);
                XMLParser xMLParse        = new XMLParser(xMLWorkerHelper);
                xMLParse.Parse(new MemoryStream(Encoding.UTF8.GetBytes(HtmlString)));
                Pdf.Close();
                using (FileStream fileStream = System.IO.File.Create(ruta + nombreDeReporte + ".pdf"))
                {
                    fileStream.Write(stream.ToArray(), 0, stream.ToArray().Length);
                }
                return(File(ruta + nombreDeReporte + ".pdf", System.Net.Mime.MediaTypeNames.Application.Octet, nombreDeReporte + ".pdf"));
            }
        }
示例#30
0
        /* (non-Javadoc)
         * @see com.itextpdf.tool.xml.ITagProcessor#content(com.itextpdf.tool.xml.Tag, java.lang.String)
         */
        public override IList <IElement> Content(IWorkerContext ctx, Tag tag, String content)
        {
            List <Chunk>       sanitizedChunks = HTMLUtils.Sanitize(content, false);
            List <IElement>    l = new List <IElement>(1);
            NoNewLineParagraph sanitizedNoNewLineParagraph = new NoNewLineParagraph();

            try {
                HtmlPipelineContext htmlPipelineContext = GetHtmlPipelineContext(ctx);
                foreach (Chunk sanitized in sanitizedChunks)
                {
                    sanitizedNoNewLineParagraph.Add(GetCssAppliers().Apply(sanitized, tag, htmlPipelineContext));
                }
                if (sanitizedNoNewLineParagraph.Count > 0)
                {
                    l.Add(GetCssAppliers().Apply(sanitizedNoNewLineParagraph, tag, htmlPipelineContext));
                }
            }
            catch (NoCustomContextException e) {
                throw new RuntimeWorkerException(e);
            }
            return(l);
        }