C# 如何使用iTextSharp将表格添加到页面开头的绝对位置?

C# 如何使用iTextSharp将表格添加到页面开头的绝对位置?,c#,pdf,pdf-generation,itextsharp,itext,C#,Pdf,Pdf Generation,Itextsharp,Itext,我有一个名为PdfHeaderFooter的类,它扩展了PdfPageEventHelper类 在这个类中,我以这种方式实现了onedpage()方法。如何查看此方法创建文档每页的页眉和页脚 现在我必须在页面开始的绝对位置添加PdfPTable选项卡头 我该怎么办?我要发疯了 // write on end of each page public override void OnEndPage(PdfWriter writer, Document document) {

我有一个名为PdfHeaderFooter的类,它扩展了PdfPageEventHelper

在这个类中,我以这种方式实现了onedpage()方法。如何查看此方法创建文档每页的页眉和页脚

现在我必须在页面开始的绝对位置添加PdfPTable选项卡头

我该怎么办?我要发疯了

    // write on end of each page
    public override void OnEndPage(PdfWriter writer, Document document)
    {
        base.OnEndPage(writer, document);

        // HEADER:
        PdfPTable tabHead = new PdfPTable(3);
        tabHead.SetWidths(new int[] { 165, 205, 125 });


        //tabHead.TotalWidth = 460F;
        tabHead.TotalWidth = document.Right - document.Left;        // TotalWidth = 495
        tabHead.WidthPercentage = 98;


        PdfPCell cell1 = new PdfPCell(iTextSharp.text.Image.GetInstance(folderImages + "logoEarlyWarning.png"), true) { Border = PdfPCell.BOTTOM_BORDER };
        tabHead.AddCell(cell1);
        //tabHead.AddCell(new PdfPCell(new Phrase("CELL 1:")) { Border = PdfPCell.BOTTOM_BORDER, Padding = 5, MinimumHeight = 50, PaddingTop = 15, });

        tabHead.AddCell(new PdfPCell(new Phrase("")) { Border = PdfPCell.BOTTOM_BORDER, Padding = 5, MinimumHeight = 50, PaddingTop = 15 });

        if (_sourceId == "NVD")
        {
            iTextSharp.text.Image logo = iTextSharp.text.Image.GetInstance(folderImages + "nvdLogo.png");
            logo.ScalePercent(48f);
            //PdfPCell cell3 = new PdfPCell(iTextSharp.text.Image.GetInstance(folderImages + "nvdLogo.png"), true) { Border = PdfPCell.BOTTOM_BORDER, PaddingBottom = 25 };
            PdfPCell cell3 = new PdfPCell(logo) { Border = PdfPCell.BOTTOM_BORDER, PaddingLeft = 50 };
            tabHead.AddCell(cell3);
        }
        else if (_sourceId == "DeepSight")
        {
            PdfPCell cell3 = new PdfPCell(iTextSharp.text.Image.GetInstance(folderImages + "DSLogo.jpg"), true) { Border = PdfPCell.BOTTOM_BORDER };
            tabHead.AddCell(cell3);
        }
        //tabHead.AddCell(new PdfPCell(new Phrase("CELL 3:")) { Border = PdfPCell.BOTTOM_BORDER, Padding = 5, MinimumHeight = 50, PaddingTop = 15 });


        tabHead.WriteSelectedRows(0, -1, document.Left, document.Top, writer.DirectContent);

        float headerHeight = tabHead.CalculateHeights();


        // FOOTER:
        int pageN = writer.PageNumber;      // numero della pagina corrente OK
        String text = "Page " + pageN + " of ";
        float len = bf.GetWidthPoint(text, 8);

        Rectangle pageSize = document.PageSize;

        cb.SetRGBColorFill(100, 100, 100);

        cb.BeginText();
        cb.SetFontAndSize(bf, 8);
        cb.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetBottom(30));
        cb.ShowText(text);
        cb.EndText();

        cb.AddTemplate(template, pageSize.GetLeft(40) + len, pageSize.GetBottom(30));

        cb.BeginText();
        cb.SetFontAndSize(bf, 8);
        cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT,
            "Printed On " + PrintTime,
            pageSize.GetRight(40),
            pageSize.GetBottom(30), 0);
        cb.EndText();

    }

Tnx

这个问题已经在这里得到了回答:

考虑到页边距,您将在页面的开头添加页眉。您希望将表格添加到页边距内。因此,需要将表格的高度添加到上边距的Y坐标中

例如:如果表格高度为
h
,则需要:

tabHead.WriteSelectedRows(0, -1, document.Left, document.Top + h, writer.DirectContent);

如果你不读别人的答案,问问题有什么意义?您仍在生成一个膨胀的PDF文件!修好它

我不太清楚你的具体问题是什么。上面的代码不起作用吗?您正在使用
WriteSelectedRows
这是绝对定位表的方式,这是否不符合预期?因此我的tabHead表已经绝对定位在页面的开头?