我需要制作一个打印的表格(报告),其中,除其他外,(页眉,页脚)将显示一个表格,如下面的代码片段所示。
我想给pdf用户一个文件,为此我使用itextsharpnuget包版本 5.5.10
请告诉我。如有必要,如何将整行(T1、T2等)转移到新页面
th, td{
border: 2px solid black;
}
<table>
<tr>
<td rowspan = 2>T1</td>
<td>OrderCode 1</td>
<td>Vendor</td>
<td rowspan = 2>Overhang</td>
<td rowspan = 2>Runtime</td>
</tr>
<tr>
<td>OrderCode2</td>
<td>Vendor</td>
</tr>
<td rowspan = 2>T2</td>
<td>OrderCode 3</td>
<td>Vendor</td>
<td rowspan = 2>Overhang</td>
<td rowspan = 2>Runtime</td>
</tr>
<tr>
<td>OrderCode4</td>
<td>Vendor</td>
</tr>
<td rowspan = 2>T3</td>
<td>OrderCode 4</td>
<td>Vendor</td>
<td rowspan = 2>Overhang</td>
<td rowspan = 2>Runtime</td>
</tr>
<tr>
<td>OrderCode5</td>
<td>Vendor</td>
</tr>
</table>
pdf文件创建代码
using(var fs = new FileStream(path))
{
var document = new Document(PageSize.A4.Rotate(), 10,10,10,10);
var pdfWriter = PdfWriter.GetInstance(document, fs);
var table = new PdfPTable(5);
var tools = new List<int> {1,2,3};
for(var row = 0; row<50; row++)
{
table.AddCell(new PdfPTable(new Phrase($"T{row}")){Rowspan = tools.Count});
table.AddCell($"Cutter №{tools.First()});
table.AddCell("Vendor");
table.AddCell(new PdfPTable(new Phrase("Overhang")){Rowspan = tools.Count});
table.AddCell(new PdfPTable(new Phrase("Runtime")){Rowspan = tools.Count});
foreach(var tool in tools.Skip(1))
{
table.AddCell($"Cutter №{tool});
table.AddCell("Vendor");
}
}
document.Add(table);
document.Close();
pdfWriter.Close();
}
该问题已通过以下方式解决:
向文档中添加了多个表格,但为每个组创建了一个新表格。1.1. 我们添加一个计数器变量,它将包含工作表上剩余可用空间的值。
在将表格添加到文档之前,它会检查是否有足够的空间来添加整行。
2.1. 如果有足够的空间,那么我们向文档添加一行并减少计数器变量以显示剩余多少可用空间。
2.2. 如果没有足够的空间,则向文档添加一个新页面,重置计数器变量,添加一行,将变量减去添加行的值