在itextsharp中添加新页面将与标题重叠

时间:2016-02-17 06:08:16

标签: c# asp.net pdf itextsharp

我正在使用iTextSharp版本5.4.5.0。

使用document.NewPage()方法添加新页面时遇到问题。

当我使用上述方法添加新页面时,此新页面的内容将与我的标题部分重叠。我已在OnEndPage()类的PdfPageEventHelper方法中创建了标头表。

以下是OnEndPage事件中标题的代码:

PdfPTable table = new PdfPTable(1);
table.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
PdfPTable headerTable = new PdfPTable(1) { TotalWidth = document.PageSize.Width };

PdfPCell cImage = new PdfPCell(ImageHeader, true);
cImage.HorizontalAlignment = Element.ALIGN_RIGHT;
cImage.Border = iTextSharp.text.Rectangle.NO_BORDER;
cImage.FixedHeight = 45f;
cImage.PaddingTop = 0f;

headerTable.AddCell(cImage);

PdfPCell cell = new PdfPCell(headerTable) { Border = Rectangle.NO_BORDER };
table.AddCell(cell);

table.WriteSelectedRows(0, -1, document.LeftMargin, document.Top, writer.DirectContent);   // Here the document.Top value is 45

我还在创建文档对象时将margin top指定为45,如下所示:

MemoryStream workStream = new MemoryStream();
Document document = new Document(); 

PdfWriter writer = PdfWriter.GetInstance(document, workStream);
document.SetMargins(30, 30, 45, 30);

在添加新页面时,有人可以帮助我不将文档内容与标题表重叠吗?

感谢。

1 个答案:

答案 0 :(得分:0)

执行此操作时:

table.WriteSelectedRows(0, -1, document.LeftMargin, document.Top, writer.DirectContent);

您声明// Here the document.Top value is 45不正确

您可以像这样创建文档:

Document document = new Document();

这意味着文档的左下角坐标为(0, 0),右上角坐标为(595, 842)

然后定义文档的边距:

document.SetMargins(30, 30, 45, 30);

这意味着:

  • Document.Left = 0 + 30 = 30
  • Document.Right = 595 - 30 = 565
  • Document.Top = 842 - 45 = 797
  • Document.Bottom = 0 + 30 = 30

所以当你有这一行时:

table.WriteSelectedRows(0, -1, document.LeftMargin, document.Top, writer.DirectContent);

你实际上有:

table.WriteSelectedRows(0, -1, 30, 797, writer.DirectContent);

这是完全错误的,因为这会使您的表格与您在边距内添加的任何内容重叠。

要解决此问题,您需要计算表格的高度。例如,请参阅问题How to define the page size based on the content?

的答案
table.LockedWidth = true;
Float h = table.TotalHeight;

现在您可以使用h来定义上边距:

document.SetMargins(30, 30, 20 + h, 30);

您可以使用Document.Top来定义表格的y位置:

table.WriteSelectedRows(0, -1,
    document.LeftMargin,
    document.Top + h + 10,
    writer.DirectContent);

使用此代码,表格将添加边距内,在页面顶部下方留出10个用户单位的空白区域,在上边距上方留出10个用户单位的空白区域。