C# 如何使用iTextSharp将表格添加到页面开头的绝对位置?
我有一个名为PdfHeaderFooter的类,它扩展了PdfPageEventHelper类 在这个类中,我以这种方式实现了onedpage()方法。如何查看此方法创建文档每页的页眉和页脚 现在我必须在页面开始的绝对位置添加PdfPTable选项卡头 我该怎么办?我要发疯了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) {
// 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表已经绝对定位在页面的开头?