我正在使用itextsharp来创建文档。我在文档中创建了一个页脚部分,但页脚顶部的内容重叠。
我该如何解决这个问题?
我想在每个页面上添加页码,我该怎么办?
请检查此链接 Pdf document Image
public class PdfNote
{
public int Create(int id, string path)
{
try
{
var file = path;
if (System.IO.File.Exists(file))
System.IO.File.Delete(file);
Document document = new Document(PageSize.A4, 10, 10, 10, 10);
var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(file, FileMode.Create));
document.Open();
writer.PageEvent = new Footer();
// main content
document.Close();
return 1;
}
catch (Exception ex)
{
throw ex;
}
}
public partial class Footer : PdfPageEventHelper
{
public override void OnEndPage(PdfWriter writer, Document doc)
{
PdfPTable fTbl = new PdfPTable(1);
fTbl.TotalWidth = 550;
fTbl.DefaultCell.Border = 0;
PdfPTable line = new PdfPTable(1);
line.DefaultCell.Border = 0;
line.DefaultCell.BorderWidthBottom = 0.2f;
line.DefaultCell.Padding = 5;
line.AddCell("");
fTbl.AddCell(line);
PdfPTable footerTbl = new PdfPTable(3);
footerTbl.TotalWidth = 550;
footerTbl.DefaultCell.Column.Alignment = 1;
footerTbl.HorizontalAlignment = Element.ALIGN_CENTER;
footerTbl.DefaultCell.Border = 0;
footerTbl.AddCell("Print Name:");
footerTbl.AddCell("Signature:");
footerTbl.AddCell("Date:");
PdfPCell cell = new PdfPCell();
cell.Padding = 20;
cell.Border = 0;
cell.BorderWidthBottom = 1;
footerTbl.AddCell(cell);
footerTbl.AddCell(cell);
footerTbl.AddCell(cell);
fTbl.AddCell(footerTbl);
fTbl.AddCell(line);
fTbl.WriteSelectedRows(0, -1, 15, 110, writer.DirectContent);
}
}
}
答案 0 :(得分:7)
在
Document document = new Document(PageSize.A4, 10, 10, 10, 10);
你告诉iText几乎不留任何余量(例如用于页脚行)。因此,您的页脚就不足为奇了
fTbl.WriteSelectedRows(0, -1, 15, 110, writer.DirectContent);
经常与内容重叠。
因此,只需调整边距(尤其是底部边距)和页脚位置,使其不会相互重叠。
您使用的Document
构造函数记录为
/// <summary>
/// Constructs a new Document-object.
/// </summary>
/// <param name="pageSize">the pageSize</param>
/// <param name="marginLeft">the margin on the left</param>
/// <param name="marginRight">the margin on the right</param>
/// <param name="marginTop">the margin on the top</param>
/// <param name="marginBottom">the margin on the bottom</param>
public Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop, float marginBottom) {
因此,您的new Document(PageSize.A4, 10, 10, 10, 10)
指示iText创建A4尺寸的文档,并在填充内容时仅在每个方向留下10个点的可用边距空间。 10点并不多。
您使用的PdfPTable
表编写方法记录为
/**
* Writes the selected rows to the document.
*
* @param rowStart the first row to be written, zero index
* @param rowEnd the last row to be written + 1. If it is -1 all the
* rows to the end are written
* @param xPos the x write coordinate
* @param yPos the y write coordinate
* @param canvas the <CODE>PdfContentByte</CODE> where the rows will
* be written to
* @return the y coordinate position of the bottom of the last row
*/
public float WriteSelectedRows(int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte canvas)
因此,您的代码
fTbl.WriteSelectedRows(0, -1, 15, 110, writer.DirectContent);
开始在坐标(15,110)处绘制表格---原点(0,0)在这里是文档的左下角。
因此,显然,页面内容区域和页脚区域在条带10中重叠&lt; = y&lt; = 110.您应该增加底部边距(Document
构造函数中的最后一个参数)并减小y表绘图调用的位置不再重叠。