如何在 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);