问题
Header Content and Pdftable is overlapping
How can I place PdfPTable at any position in the pdf page using (x, y) positioning like (100, 200) or (15, 100) at any place on the pdf page?
Header Table using PdfEventHelper
public override void OnEndPage(PdfWriter writer, Document document)
{
AddHeader(writer, document);
}
public void AddHeader(PdfWriter writer, Document document)
{
// set no of rows
PdfPTable headerTable = new PdfPTable(1);
// set the width
headerTable.TotalWidth = document.PageSize.Width;
headerTable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
PdfPCell company = new PdfPCell(new Phrase(new Chunk("Name", fontArial)));
company.HorizontalAlignment = Element.ALIGN_CENTER;
company.BorderWidth = 0;
headerTable.AddCell(company);
PdfPCell report = new PdfPCell(new Phrase(new Chunk("PrintedDate", fontArial)));
report.HorizontalAlignment = Element.ALIGN_CENTER;
report.BorderWidth = 0;
headerTable.AddCell(report);
headerTable.TotalWidth = document.PageSize.Width - 20;
// write rows to the pdf output stream
Rectangle pageSize = document.PageSize;
headerTable.WriteSelectedRows(0, -1, 0, (document.PageSize.Height - 10), writer.DirectContent);
}
In My Main Class I am doing like this
PdfWriter pdfWriter = PdfWriter.GetInstance(document, new FileStream(pdfFile, FileMode.Create));
pdfWriter.PageEvent = page;
document.Open()
Next Here I am adding a pdftable
PdfPTable HeaderTable = new PdfPTable(2);
HeaderTable.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;
HeaderTable.TotalWidth = pageSize.Width - 80;
HeaderTable.SetWidthPercentage(new float[] {45, 45}, pageSize);
PdfPCell HeaderLeftCell = new PdfPCell(new Phrase(8, HeaderLeft, HeaderFont));
HeaderLeftCell.Padding = 5;
HeaderLeftCell.PaddingBottom = 8;
HeaderLeftCell.BorderWidthRight = 0;
HeaderTable.AddCell(HeaderLeftCell);
PdfPCell HeaderRightCell = new PdfPCell(new Phrase(8, HeaderRight, HeaderFont));
HeaderRightCell.HorizontalAlignment = Element.ALIGN_RIGHT;
HeaderRightCell.Padding = 5;
HeaderRightCell.PaddingBottom = 8;
HeaderRightCell.BorderWidthLeft = 0;
HeaderTable.AddCell(HeaderRightCell);
HeaderTable.WriteSelectedRows(0, -1, pageSize.GetLeft(40), pageSize.GetTop(50), cb);
The result is overlap of Header Content and pdftable
回答1:
As mentioned in the itext docs-
To avoid having the cell border and the content overlap, if you are having thick cell borders, call the setUserBorderPadding(true), like this:
cell.setUserBorderPadding(true);
回答2:
you have calculated the y position for your header table in onload()
like document.PageSize.Height-10
.
please set some calculated value instead of pageSize.GetTop(50)
in the second table also.
来源:https://stackoverflow.com/questions/9321867/itextsharp-place-pdfptable-at-desired-position