Member 14192879 Ответов: 1

Как добавить нижний колонтитул только на последнюю страницу itextsharp pdf?


Я экспортирую свою HTML - страницу в pdf и добавляю нижний колонтитул в pdf с помощью "PdfPageEventHelper", но он добавляет нижний колонтитул на каждой странице, но я хочу добавить нижний колонтитул только на последней странице?

Что я уже пробовал:

код для преобразования html в pdf :
StringWriter s_tw = new StringWriter();
HtmlTextWriter h_textw = new HtmlTextWriter(s_tw);            
div1.RenderControl(h_textw);//Name of the Panel
Document doc = new Document();
doc = new Document(PageSize.A4, 50, 50, 50, 50);
FontFactory.GetFont("Times New Roman", 8);
StringReader s_tr = new StringReader(s_tw.ToString());
// HTMLWorker html_worker = new HTMLWorker(doc);
using (MemoryStream memoryStream = new MemoryStream())
{
    PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);
    writer.PageEvent = new PDFFooter();
    doc.Open();
    
    XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, s_tr);
    
    
    doc.Close();
    
    writer.Close();
    
    byte[] bytes = memoryStream.GetBuffer();
    memoryStream.Close();

код для помощника по событиям:
public class PDFFooter : PdfPageEventHelper
{

    PdfContentByte cb;
    PdfTemplate template;
    // we will put the final number of pages in a template

    // write on top of document
    /// <inheritdoc>
    public override void OnOpenDocument(PdfWriter writer, Document document)
    {

       

    }
    /// <inheritdoc>
    public override void OnCloseDocument(PdfWriter writer, Document document)
    {
base.OnCloseDocument(writer, document);

          PdfPTable tab = new PdfPTable(1);
          PdfPCell cell = new PdfPCell(new Phrase(writer.PageNumber));
          cell.Border = 0;
          tab.TotalWidth = 300F;
          tab.AddCell(cell);
          tab.WriteSelectedRows(0, -1, 300, 30, writer.DirectContent);
       


    }
    // write on start of each page
    /// <inheritdoc>
    public override void OnStartPage(PdfWriter writer, Document document)
    {
          
    }


    /// <inheritdoc>
    public override void OnEndPage(PdfWriter writer, Document document)
    {
        if (document.PageNumber == writer.PageNumber - 1)
        { 
        
            PdfContentByte cb = writer.DirectContent;
            ColumnText ct = new ColumnText(cb);
            cb.BeginText();
            cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 8.0f);
            cb.SetTextMatrix(document.LeftMargin, document.BottomMargin);
            // cb.ShowText("");
            cb.ShowText( "Name: " + username));
            cb.EndText();


        }

    }
}

1 Ответов

Рейтинг:
1

Sandeep Mewara

Ссылка: Как добавить текст в качестве верхнего или нижнего колонтитула?[^]

Трудно пройти через весь ваш код. Это было бы легче для вас. Используйте эту ссылку и попробуйте что-нибудь ниже. Кстати, itext 7 использует холст, ссылка здесь[^].

class MyFooter : PdfPageEventHelper 
{
    Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
 
    public override void onEndPage(PdfWriter writer, Document document) {
        PdfContentByte cb = writer.getDirectContent();
        Phrase header = new Phrase("this is a header", ffont);
        Phrase footer = new Phrase("this is a footer", ffont);
        ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
                header,
                (document.right() - document.left()) / 2 + document.leftMargin(),
                document.top() + 10, 0);
        ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
                footer,
                (document.right() - document.left()) / 2 + document.leftMargin(),
                document.bottom() - 10, 0);
    }
}

Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
writer.setPageEvent(new MyFooter());


Member 14192879

Я уже реализовал этот код, но он добавляет нижний колонтитул на все страницы, но я хочу добавить только на последнюю страницу.

Sandeep Mewara

Ссылаться:
https://www.c-sharpcorner.com/forums/header-print-on-first-page-not-to-all-using-itextsharp
https://stackoverflow.com/questions/17898123/header-footer-being-displayed-on-just-last-page-using-itextsharp