首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLWorkerHelper将html页面转换为pdf只生成前2页

XMLWorkerHelper将html页面转换为pdf只生成前2页
EN

Stack Overflow用户
提问于 2016-06-21 09:57:05
回答 2查看 1.2K关注 0票数 0

我只拿到前两页。我在第三页中有一个生成的元素列表。当我的集合中有太多的元素时,我的pdf输出中的所有页面都变成空白。

代码语言:javascript
复制
  using (FileStream fs = new FileStream(filePath, FileMode.Create))
                {                        
                    Document document = new Document(PageSize.A4, 25, 25, 30, 30);
                    WebClient wc = new WebClient();
                    string htmlText = wc.DownloadString(textUrl);                      

                    PdfWriter pdfWriter = PdfWriter.GetInstance(document, fs);
                    document.Open();
                      // register all fonts in current computer
                    FontFactory.RegisterDirectories(); 
                    XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider();
                    using (var msHtml = new MemoryStream(System.Text.Encoding.Default.GetBytes(htmlText)))
                    {
                        //Set factories
                        var cssAppliers = new CssAppliersImpl(fontProvider);
                        var htmlContext = new HtmlPipelineContext(cssAppliers);

                        //HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
                        htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

                        //FontFactory.Register(arialuniTff);
                        string gishaTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "GISHA.TTF");
                        FontFactory.Register(gishaTff);

                        var worker = XMLWorkerHelper.GetInstance();
                        var cssStream = new FileStream(FolderMapPath("/css/style.css"), FileMode.Open);

                        worker.ParseXHtml(pdfWriter, document, msHtml, cssStream, new UnicodeFontFactory());
                    }

                    // Close the document
                    document.Close();

                    // Close the writer instance
                    pdfWriter.Close();
                }                   

这是我的cshtml代码

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-05 07:04:55

我就是这样解决问题的。问题不在于C#后端代码。现在看来,XMLWorkerHelper并不能很好地处理循环问题。我必须在PDF文件中显示项目列表。如果集合包含的项不多,则结果很好,但是当集合包含50多个项时,页面会中断,因为这不能在单个页面中显示。我所做的是,我开始计数项目的数量,在一些数字,如40,我只是包括一个中断元素<li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>。并重置计数器并继续显示我的项目。这是伟大的,我的问题解决了。也许这对某人有帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-10-03 20:57:34

我只有在Java中使用iText的经验,但是您使用的MemoryStream对象是否有一个字节限制,当第3页上的表有太多的元素要存储时,这个字节限制就会被填满吗?如果是这样的话,那么该长表上的结束标记可能不会写入MemoryStream,因此该表和之后的所有内容都不会被呈现;即get的截短由PDF转换器引擎完成。

您能尝试使用不同的Stream对象吗?

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

https://stackoverflow.com/questions/37941205

复制
相关文章

相似问题

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