如何在iTextsharp中为表格提供绝对位置

时间:2016-02-05 11:27:45

标签: c# itext

我正在使用iTextsharp来创建一个表。我想在页面中的特定位置使用表格,我正在使用 table.WriteSelectedRows(0,-1,300,300,pcb); 方法,但它无法正常工作。这是我的代码。

      x     y       A       B
0  ding  ding  [0, 1]  [0, 0]
1  ding  dong  [0, 1]  [0, 1]
2  ding  ding  [0, 1]  [0, 0]
3  ding  ding  [0, 1]  [0, 0]
4  ding  dong  [0, 1]  [0, 1]
5  ding  ding  [0, 1]  [0, 0]
6  ding  ding  [0, 1]  [0, 0]

2 个答案:

答案 0 :(得分:1)

在您向表格添加任何内容之前,您尝试编写表格。页面上没有显示任何内容是正常的。在代码中向下移动writeSelectedRows()

PdfPTable table = new PdfPTable(9);
table.TotalWidth = 595;

// there isn't any content in the table: there's nothing to write yet

// Header row.
table.AddCell(GetCell("Header 1", 1, 2));
table.AddCell(GetCell("Header 2", 1, 2));
table.AddCell(GetCell("Header 3", 5, 1));
table.AddCell(GetCell("Header 4", 1, 2));
table.AddCell(GetCell("Header 5", 1, 2));

// Inner middle row.
table.AddCell(GetCell("H1"));
table.AddCell(GetCell("H2"));
table.AddCell(GetCell("H3"));
table.AddCell(GetCell("H4"));
table.AddCell(GetCell("H5"));

// Now we've added 2 rows: two rows will be shown:

table.WriteSelectedRows(0, -1, 300, 300, pcb);

请注意,我已更改了表格中的列数,因为您只为第一行添加了5行,而第二行只添加了5行。请注意,不完整的行未呈现,因此这可能是您的代码没有达到预期效果的另一个原因。

最后你应该删除:

doc.Add(table);

这会将表格添加到页面中光标的当前位置。那可能不是你想要的地方。

答案 1 :(得分:1)

你说它无效但没有解释什么不起作用。

因此,我运行程序将输出与代码进行比较。结果:

Output of OP's code

考虑到您的代码明确将表格定位为A4页面

table.TotalWidth = 595f;

位于水平位于中间页的位置

table.WriteSelectedRows(0, -1, 300, 300, pcb);

这正是预期的结果。因此,正在运作

如果你的初衷是让表格在页面中间水平开始并延伸到右页边框,你应该将表格宽度设置为页面宽度减去你的中心x ,即

table.TotalWidth = 295f;

另一方面,如果您希望表格从左页边框开始并向右延伸,则您应该在x = 0处有位置:

table.WriteSelectedRows(0, -1, 0, 300, pcb);