我正在使用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);
在添加新页面时,有人可以帮助我不将文档内容与标题表重叠吗?
感谢。
答案 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个用户单位的空白区域。