我正在使用iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style)
将 html 表格转换为 pdf 文档。有些行包含大量数据,可能不适合当前页面,因此 iTextSharp 创建一个新页面并将该行放置在那里。如果该行不适合下一页,它会正确拆分它。
有没有办法告诉它不使用这些分页符?这是它的样子:
我正在使用iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style)
将 html 表格转换为 pdf 文档。有些行包含大量数据,可能不适合当前页面,因此 iTextSharp 创建一个新页面并将该行放置在那里。如果该行不适合下一页,它会正确拆分它。
有没有办法告诉它不使用这些分页符?这是它的样子:
对我有用的技巧是检查结果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
Chris Haas 的回答很棒——它对我有用。这是 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());
}
我很确定表行是“原子的”,如果它们溢出给定的页面,它们将被 CROPPED。
上图中的 PDF 是否在下一页继续该行?