iTextSharp:如果表格行不适合当前行,则会将表格行推送到新页面

时间:2011-06-23 13:28:21

标签: c# pdf-generation itextsharp page-break

我正在使用iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style)将html表格转换为pdf文档。某些行包含大量数据,可能不适合当前页面,因此iTextSharp会创建一个新页面并将行放在那里。如果该行不适合下一页,则会正确分割。

有没有办法告诉它不要使用这些分页符?这是它的样子:

Row gets dropped to the next page by iTextSharp

3 个答案:

答案 0 :(得分:5)

对我有用的技巧是检查ParseToList()的结果并查找PdfPTable类型的任何元素。如果您看到一个将其SplitLate属性设置为False。这里有一些你应该可以很容易地转换为C#的VB:

Dim Elements = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(SR, Nothing)
For Each El In Elements
    If TypeOf El Is PdfPTable Then
        DirectCast(El, PdfPTable).SplitLate = False
    End If
    Doc.Add(El)
Next

答案 1 :(得分:2)

克里斯哈斯的答案很棒 - 它对我有用。 这是C#中的一个:

        string template = File.ReadAllText(@"C:\my_template.html");
        var htmlText = Engine.Razor.RunCompile(template, Guid.NewGuid().ToString(), model: GetViewModel());

        TextReader reader = new StringReader(htmlText);
        var document = new Document(PageSize.A4, 30, 30, 30, 30);

        using (var stream = new MemoryStream())
        {
            PdfWriter.GetInstance(document, stream);

            document.Open();
            var pages = HTMLWorker.ParseToList(reader, new StyleSheet());
            foreach (var page in pages)
            {
                if (page is PdfPTable)
                {
                    (page as PdfPTable).SplitLate = false;
                }
                document.Add(page as IElement);
            }

            document.Close();

            File.WriteAllBytes(@"C:\my_template.pdf", stream.ToArray());
        }

答案 2 :(得分:0)

我非常确定表行是“原子”的,如果它们溢出给定页面,它们将被禁止。

上图中的PDF是否会继续下一页的那一行?