首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >itextsharp(xmlworker)解析速度慢

itextsharp(xmlworker)解析速度慢
EN

Stack Overflow用户
提问于 2015-02-04 20:58:05
回答 1查看 1.3K关注 0票数 0

我一直在使用iTextSharp将MVC视图转换为pdf,.the视图使用内联样式。在下面的代码中,一切都很好,但是解析过程很慢,-

代码语言:javascript
复制
        using (var ms = new MemoryStream())
        {
            using (var doc = new Document(PageSize.A4, 0, 1, 0,0))
            {


                using (var writer = PdfWriter.GetInstance(doc, ms))
                {
                    doc.Open();

                 XMLWorkerHelper.GetInstance().ParseXHtml(writer,doc, htmlcontent);
                //Above line is too slow    
                    doc.Close();
                }
            }

按照专家们的建议,我接着做了下面的修改-

  • 注册字体
  • 将样式移动到不同的css文件

现在我正在使用下面的代码,但是生成的pdf是空白的。它确实保留了样式,但没有字体和,即使这种方法也需要同样的时间来解析

代码语言:javascript
复制
using (var ms = new MemoryStream())
            {
                using (var doc = new Document(PageSize.A4, 0, 1, 0,0))
                {
                    using (var writer = PdfWriter.GetInstance(doc, ms))
                    {

                        doc.Open();

                        // css 
                        var cssResolver = new StyleAttrCSSResolver();
                        var cssFile = XMLWorkerHelper.GetCSS((new FileStream(Server.MapPath("~/Content/scptpdf.css"), FileMode.Open, FileAccess.Read)));
                        cssResolver.AddCss(cssFile);

                        // html
                        var fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
                        fontProvider.Register(Server.MapPath("~/Content/fonts/arial.ttf"));
                        fontProvider.Register(Server.MapPath("~/Content/fonts/arialbd."));
                        fontProvider.AddFontSubstitute("calibri","ARIAL");

                        var cssAppliers = new CssAppliersImpl(fontProvider);
                        var htmlContext = new HtmlPipelineContext(cssAppliers);
                        htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

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

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

                        byte[] byteArray = Encoding.UTF8.GetBytes(pdftext);
                        var htmlstream = new MemoryStream(byteArray);
                        p.Parse(htmlstream);

                        //XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, htmlcontent);

                        doc.Close();
                    }
                }

我需要克服延迟。能帮上忙吗。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-17 14:26:31

我删除了字体类型。现在,iTEXT夏普使用了自己的。太快了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28331295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档