iTextSharp: строка таблицы переносится на новую страницу, если она не помещается на текущей - PullRequest
3 голосов
/ 23 июня 2011

Я использую iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style), чтобы преобразовать HTML-таблицу в PDF-документ.Некоторые строки содержат много данных и могут не помещаться на текущей странице, поэтому iTextSharp создает новую страницу и помещает туда строку.Если строка не помещается на следующей странице, она разделяется правильно.

Есть ли способ сказать, что не следует использовать эти разрывы страниц?Вот как это выглядит:

Row gets dropped to the next page by iTextSharp

Ответы [ 3 ]

5 голосов
/ 24 июня 2011

Уловка, которая сработала для меня, заключается в проверке результатов ParseToList() и поиске элементов типа PdfPTable.Если вы видите один, установите его SplitLate свойство на False.Вот несколько VB, которые вы сможете легко конвертировать в C #:

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
2 голосов
/ 22 января 2016

Крис Хаас ответил отлично - у меня это сработало. Вот один в 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());
        }
0 голосов
/ 24 июня 2011

Я почти уверен, что строки таблицы "атомарные" и будут обрезаны, если они переполняют данную страницу.

Продолжает ли PDF из приведенного выше изображения эту строку на следующей странице?

...