2017-06-20 45 views
1

我想添加一个PdfPTable作为页脚,只生成PDF文档的最后一页。该表将有4列相同的宽度。我尝试了其他解决方案,我发现这里和其他网站无济于事。我已将底部页边距设置为不同的值以留出页脚的空间,并且我尝试了几个添加PDF页脚的提示,但仍未显示任何内容。 任何帮助表示赞赏。如何在最后一页中添加PdfPTable作为页脚?

这里是我的代码:

// The document creation 

    Document prDoc = new Document(PageSize.A4, 15f, 15f, 10f, 50f); 
    PdfWriter pdfWriter = PdfWriter.GetInstance(prDoc, Response.OutputStream); 

    // The event manager 
    prPageEvent pdfEvent = new prPageEvent(); 
    pdfWriter.PageEvent = pdfEvent; 
    prDoc.Open(); 
    . 
    . 
    . 
    public class prPageEvent : PdfPageEventHelper { 
     public PdfTemplate template; 
     public PdfContentByte cb; 
     BaseFont bf = null; 

     public override void OnOpenDocument(PdfWriter writer, Document document) { 
     try { 
      bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
      cb = writer.DirectContent; 
      template = cb.CreateTemplate(PageSize.A4.Width, 50); 
     } 
     catch (DocumentException de) { 
     } 
     catch (System.IO.IOException ioe) { 
     } 
     } 

     public override void OnCloseDocument(PdfWriter writer, Document document) { 
     base.OnCloseDocument(writer, document); 

     PdfPTable f = new PdfPTable(4); 
     f.TotalWidth = document.PageSize.Width - document.LeftMargin; 

     f.AddCell(new PdfPCell(new Phrase("first"))); 
     f.AddCell(new PdfPCell(new Phrase("second"))); 
     f.AddCell(new PdfPCell(new Phrase("third"))); 
     f.AddCell(new PdfPCell(new Phrase("fourth"))); 
     f.WriteSelectedRows(0, -1, document.LeftMargin+5, document.PageSize.Height-35, writer.DirectContent); 

     // Only the following simple text has worked so far, but I cannot set 
     // the exact width to each column with this approach. 

     //template.BeginText(); 
     // template.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, false), 8); 
     // template.SetTextMatrix(0, 40); 
     // template.ShowText("first second third fourth"); 
     //template.EndText(); 
     } 

     public override void OnEndPage(PdfWriter writer, Document document) { 
     base.OnEndPage(writer, document); 
     BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, false); 
     System.String text = "OnEndPage"; 
     float len = bf.GetWidthPoint(text, 8); 
     iTextSharp.text.Rectangle pageSize = document.PageSize; 
     cb.BeginText(); 
     cb.SetFontAndSize(bf, 8); 
     cb.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetBottom(30)); 
     cb.EndText(); 
     cb.AddTemplate(template, pageSize.GetLeft(40) + len, pageSize.GetBottom(30)); 
     } 
    } 
+0

我按照例子像https://stackoverflow.com/questions/12796525/add-a-pdfptable-to-bottom-of-page-in-itext https://stackoverflow.com/questions/1032614/itextsharp-creating-a-footer-page-of https://stackoverflow.com/questions/18996323/add-header-and-footer-for-pdf-using -itextsharp –

回答

1

对此的解决办法是不创建一个类从继承PdfPageEventHelper并重写它的方法,而是将内容直接在PDF文档中只是文档之前写通过创建一个PdfPTable对象并直接用WriteSelectedRows方法写入。 对于需要在文档中仅出现一次的内容,不需要使用方法OnCloseDocument

我的最终代码:

Immediately after printing the header and the content... 

// Table for final footer. 
float[] cols = new float[] { 137, 10, 137, 10, 137, 10, 127 }; 
PdfPTable f = new PdfPTable(7); 
f.SetWidthPercentage(cols, PageSize.A4); 

// Populate the table 
f.AddCell(pdfUtils.newCell("Lorem", detail_font_size, PdfPCell.ALIGN_CENTER, 1)); 
f.AddCell(pdfUtils.newCell(" ", detail_font_size, PdfPCell.ALIGN_CENTER, 0)); 
f.AddCell(pdfUtils.newCell("Ipsum", detail_font_size, PdfPCell.ALIGN_CENTER, 1)); 
f.AddCell(pdfUtils.newCell(" ", detail_font_size, PdfPCell.ALIGN_CENTER, 0)); 
f.AddCell(pdfUtils.newCell("exquisitaque", detail_font_size, PdfPCell.ALIGN_CENTER, 1)); 
f.AddCell(pdfUtils.newCell(" ", detail_font_size, PdfPCell.ALIGN_CENTER, 0)); 
f.AddCell(pdfUtils.newCell("responsum", detail_font_size, PdfPCell.ALIGN_CENTER, 1)); 

// Write the footer using absolute positioning. 
f.WriteSelectedRows(0, -1, prDoc.LeftMargin, 75, pdfWriter.DirectContent); 

// Close the document 
pdfWriter.CloseStream = false; 
prDoc.Close(); 
相关问题