XMLWorkerHelper convert html page into pdf 仅生成前 2 页

XMLWorkerHelper convert html page into pdf produces only first 2 pages

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

  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 代码

我只有在 Java 中使用 iText 的经验,但是您使用的 MemoryStream 对象是否有字节限制,当第 3 页的 table 也被填满时它要存储多少元素?如果是这种情况,那么 table 上的结束标记可能不会写入 MemoryStream,因此 table 和之后的所有内容都不会被渲染;即 get 被 PDF 转换器引擎截断。

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

这是我解决问题的方法。问题不在于 C# 后端代码。 XMLWorkerHelper 目前似乎不能很好地处理视图中的循环。我必须在我的 PDF 文件中显示项目列表。如果集合包含的项目不多,结果很好,但是当集合包含超过 50 个项目时,在该级别分页,因为无法在单个页面中显示。我所做的是,我开始计算项目的数量,并且在某个数字(例如 40)时,我只包含一个 break 元素 <li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>。并重置计数器并继续显示我的物品。这很棒,我的问题得到了解决。 可能这对某人有帮助。