如果它们包含相同数量的列,我可以创建多个行:
table = new PdfPTable(3);
var firstRowCell1 = new PdfPCell( new Phrase ("Row 1 - Column 1"));
var firstRowCell2 = new PdfPCell( new Phrase ("Row 2 - Column 2"));
var firstRowCell3 = new PdfPCell( new Phrase ("Row 3 - Column 3"));
PdfPCell[] row1Cells = { firstRowCell1, firstLineRow2, firstRowCell3 };
var row1 = new PdfPRow(row1Cells);
table.Rows.Add(row1);
var nextRowCell1 = new PdfPCell( new Phrase ("Row 2 - Column 1"));
var nextRowCell2 = new PdfPCell( new Phrase ("Row 2 - Column 2"));
var nextRowCell3 = new PdfPCell( new Phrase ("Row 2 - Column 3"));
PdfPCell[] row2Cells = { nextRowCell1, nextRowCell2, nextRowCell3 };
var row2 = new PdfPRow(row2Cells);
table.Rows.Add(row2);
这样可以很好地给我两行,每行有三列。
但是,如果我希望第一行只使用一个使用Colspan的长列,它就会消失:
var table = new PdfPTable(3);
var firstRowCell1 = new PdfPCell(new Phrase("Row 1 - Column 1"));
firstRowCell1.Colspan = 3;
PdfPCell[] row1Cells = { firstRowCell1 };
var row1 = new PdfPRow(row1Cells);
deptHeaderTable.Rows.Add(row1);
var nextRowCell1 = new PdfPCell(new Phrase("Row 2 - Column 1"));
var nextRowCell2 = new PdfPCell(new Phrase("Row 2 - Column 2"));
var nextRowCell3 = new PdfPCell(new Phrase("Row 2 - Column 3"));
PdfPCell[] row2Cells = { nextRowCell1, nextRowCell2, nextRowCell3 };
var row2 = new PdfPRow(row2Cells);
deptHeaderTable.Rows.Add(row2);
没有错误,因为它只是不呈现。
此外,我知道table.AddCell在达到当前行的表列限制时自动启动新行。但是,如果可能的话,我想使用PdfPRow。
非常感谢任何帮助。
答案 0 :(得分:15)
好像你已经阅读了原始iText开发人员(不是我)认可的文档。我可以问你找到那份文件的URL,以便我可以要求停止和停止吗?
关于您的问题的答案:请查看the official documentation,您会找到MyFirstTable示例。基于此示例,您可以按如下方式调整自己的代码:
var table = new PdfPTable(3);
var cell = new PdfPCell(new Phrase("Cell with colspan 3"));
cell.Colspan = 3;
table.AddCell(cell);
table.AddCell("row 2; cell 1");
table.AddCell("row 2; cell 2");
table.AddCell("row 2; cell 3");
如您所见,没有理由使用PdfPRow
类。 iText在内部使用PdfPRow
类,但正如我的书中所述,使用iText的开发人员不应在其代码中使用该类。
答案 1 :(得分:1)
虽然我建议按照原作者上面推荐的官方文档使用代码(谢谢先生!!!),有办法解决这个问题:
public static void TestFunction()
{
string[] cells = new string[] { "C1", "C2", "C3", "C6" };
float[] columnWidths = new float[] { 25f, 25f, 25f, 25f, 25f, 25f };
int[] colSpans = new int[] { 1, 1, 3, 1 };
PdfPTable pdfPTable = new PdfPTable(columnWidths);
var row = CreatePdfRow(cells, colSpans);
pdfPTable.Rows.Add(row);
}
public static PdfPRow CreatePdfRow(string[] cells, int[] colSpans = null)
{
// parameter values passed for cells and colSpans:
// string[] cells = new string[]{ "C1", "C2", "C3", "C6"};
// int[] colSpans = new int[] { 1,1,3,1};
if (cells == null || cells.Length <= 0)
return new PdfPRow(new PdfPCell[] { new PdfPCell(new Phrase("")) });
List<PdfPCell> Cells = new List<PdfPCell>();
for (var i = 0; i < cells.Length; i++)
{
var pdfPCell = new PdfPCell(new Phrase(cells[i] ?? ""));
if (colSpans != null && colSpans.Length > i)
pdfPCell.Colspan = colSpans[i];
Cells.Add(pdfPCell);
// For cells with ColSpan > 1, add null cells to fill up the empty spots
if (colSpans != null && colSpans.Length > i && colSpans[i] > 1)
{
for (var j = 1; j < colSpans[i]; j++)
{
Cells.Add(null);
}
}
}
PdfPRow row = new PdfPRow(Cells.ToArray());
return row;
}