如何在 iTextsharp 中给 table 一个绝对位置
How to give an absolute position to a table in iTextsharp
我正在使用 iTextsharp 创建一个 table.I 想要在页面中特定位置的 table 并且我正在使用 table.WriteSelectedRows(0, - 1, 300, 300, pcb); 方法但它不起作用。这是我的代码。
using (FileStream fs = new FileStream("TableTest.pdf", FileMode.Create))
{
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
PdfContentByte pcb = writer.DirectContent;
PdfPTable table = new PdfPTable(9);
table.TotalWidth = 595f;
// Hdeaer 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"));
// Bottom row.
table.AddCell(GetCell("D1"));
table.AddCell(GetCell("D2"));
table.AddCell(GetCell("D3"));
table.AddCell(GetCell("D4"));
table.AddCell(GetCell("D5"));
table.AddCell(GetCell("D6"));
table.AddCell(GetCell("D7"));
table.AddCell(GetCell("D8"));
table.AddCell(GetCell("D9"));
table.WriteSelectedRows(0, -1, 300, 300, pcb);
doc.Close();
}
private PdfPCell GetCell(string text)
{
return GetCell(text, 1, 1);
}
private PdfPCell GetCell(string text, int colSpan, int rowSpan)
{
PdfPCell cell = new PdfPCell(new Phrase(text));
cell.HorizontalAlignment = 1;
cell.Rowspan = rowSpan;
cell.Colspan = colSpan;
return cell;
}
您尝试在向 table 添加任何内容之前编写 table。页面上没有任何显示是正常的。在您的代码中向下移动 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);
请注意,我已经更改了 table 中的列数,因为您只为第一行添加了 5 行,为第二行添加了五行。请注意,未呈现不完整的行,因此这可能是您的代码未按预期执行的另一个原因。
最后你应该删除:
doc.Add(table);
这会在页面中光标的当前位置添加 table。这可能不是你想要的。
你说它不起作用但没有解释什么不起作用。
因此,我运行 你的程序将输出与你的代码进行比较。结果:
考虑到您的代码明确定位 table 与 A4 页面一样宽
table.TotalWidth = 595f;
位于页面中间的水平位置
table.WriteSelectedRows(0, -1, 300, 300, pcb);
这正是我们所期望的。因此,它正在工作!
如果您的初衷是让 table 从页面中间水平开始并延伸到页面右侧边框,您应该将 table 宽度设置为页面宽度 [=31] =]减去中心 x,即
table.TotalWidth = 295f;
另一方面,如果您希望 table 从左页边框开始并延伸到右页边框,您的位置应该在 x = 0:
table.WriteSelectedRows(0, -1, 0, 300, pcb);
我正在使用 iTextsharp 创建一个 table.I 想要在页面中特定位置的 table 并且我正在使用 table.WriteSelectedRows(0, - 1, 300, 300, pcb); 方法但它不起作用。这是我的代码。
using (FileStream fs = new FileStream("TableTest.pdf", FileMode.Create))
{
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
PdfContentByte pcb = writer.DirectContent;
PdfPTable table = new PdfPTable(9);
table.TotalWidth = 595f;
// Hdeaer 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"));
// Bottom row.
table.AddCell(GetCell("D1"));
table.AddCell(GetCell("D2"));
table.AddCell(GetCell("D3"));
table.AddCell(GetCell("D4"));
table.AddCell(GetCell("D5"));
table.AddCell(GetCell("D6"));
table.AddCell(GetCell("D7"));
table.AddCell(GetCell("D8"));
table.AddCell(GetCell("D9"));
table.WriteSelectedRows(0, -1, 300, 300, pcb);
doc.Close();
}
private PdfPCell GetCell(string text)
{
return GetCell(text, 1, 1);
}
private PdfPCell GetCell(string text, int colSpan, int rowSpan)
{
PdfPCell cell = new PdfPCell(new Phrase(text));
cell.HorizontalAlignment = 1;
cell.Rowspan = rowSpan;
cell.Colspan = colSpan;
return cell;
}
您尝试在向 table 添加任何内容之前编写 table。页面上没有任何显示是正常的。在您的代码中向下移动 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);
请注意,我已经更改了 table 中的列数,因为您只为第一行添加了 5 行,为第二行添加了五行。请注意,未呈现不完整的行,因此这可能是您的代码未按预期执行的另一个原因。
最后你应该删除:
doc.Add(table);
这会在页面中光标的当前位置添加 table。这可能不是你想要的。
你说它不起作用但没有解释什么不起作用。
因此,我运行 你的程序将输出与你的代码进行比较。结果:
考虑到您的代码明确定位 table 与 A4 页面一样宽
table.TotalWidth = 595f;
位于页面中间的水平位置
table.WriteSelectedRows(0, -1, 300, 300, pcb);
这正是我们所期望的。因此,它正在工作!
如果您的初衷是让 table 从页面中间水平开始并延伸到页面右侧边框,您应该将 table 宽度设置为页面宽度 [=31] =]减去中心 x,即
table.TotalWidth = 295f;
另一方面,如果您希望 table 从左页边框开始并延伸到右页边框,您的位置应该在 x = 0:
table.WriteSelectedRows(0, -1, 0, 300, pcb);