itextsharp place Pdfptable at desired position

可紊 提交于 2019-12-21 17:13:06

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!