0

我只得到前两页。我在第三页中有一个生成的元素列表。当我的集合中有太多元素时,我的 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代码

4

2 回答 2

0

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

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

于 2016-10-03T20:57:34.317 回答
0

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

于 2016-10-05T07:04:55.400 回答