I'm using iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style) to convert an html table into a pdf doc. Some rows contain a lot of data, and may not fit on the current page, so iTextSharp creates a ne开发者_Python百科w page and places the row there. If the row doesn't fit on the next page, it splits it correctly.
Is there a way to tell it to not use these page breaks? Here is what it looks like:

The trick that worked for me is to inspect the results of ParseToList() and look for any elements that are of type PdfPTable. If you see one set its SplitLate property to False. Here's some VB that you should be able to convert to C# fairly easily:
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
Chris Haas answer is great - it worked for me. Here is one in 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());
}
I'm pretty sure table rows are "atomic", and will be CROPPED if they overflow a given page.
Does the PDF from the above image continue that row on the next page?
加载中,请稍侯......
精彩评论