iTextSharp PageNumber但不在第一页和最后一页

时间:2011-07-14 09:25:22

标签: c# itextsharp

我正在尝试显示我的PDF页面的页码,但我不想在第一页和最后一页上显示它,因为它们是封面。

我使用此代码:

public class PDFPage : iTextSharp.text.pdf.PdfPageEventHelper
{
    //I create a font object to use within my footer
    protected iTextSharp.text.Font footer
    {
        get
        {
            // create a basecolor to use for the footer font, if needed.
            iTextSharp.text.Color grey = new iTextSharp.text.Color(40, 40, 40);
            Font font = FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, grey);
            return font;
        }
    }

    //override the OnPageEnd event handler to add our footer
    public override void OnEndPage(PdfWriter writer, Document doc)
    {
        if (doc.PageNumber > 1)
        {
            //I use a PdfPtable with 2 columns to position my footer where I want it
            PdfPTable footerTbl = new PdfPTable(2);

            //set the width of the table to be the same as the document
            footerTbl.TotalWidth = doc.PageSize.Width;

            //Center the table on the page
            footerTbl.HorizontalAlignment = Element.ALIGN_CENTER;

            //Create a paragraph that contains the footer text
            Paragraph para = new Paragraph(" ", footer);

            //add a carriage return
            para.Add(Environment.NewLine);
            para.Add(" ");

            //create a cell instance to hold the text
            PdfPCell cell = new PdfPCell(para);

            //set cell border to 0
            cell.Border = 0;

            //add some padding to bring away from the edge
            cell.PaddingLeft = 10;

            //add cell to table
            footerTbl.AddCell(cell);

            //create new instance of Paragraph for 2nd cell text
            para = new Paragraph(" " + doc.PageNumber, footer);

            //create new instance of cell to hold the text
            cell = new PdfPCell(para);

            //align the text to the right of the cell
            cell.HorizontalAlignment = Element.ALIGN_LEFT;
            //set border to 0
            cell.Border = 0;

            // add some padding to take away from the edge of the page
            cell.PaddingRight = 10;

            //add the cell to the table
            footerTbl.AddCell(cell);

            //write the rows out to the PDF output stream.
            footerTbl.WriteSelectedRows(0, -1, 0, (doc.BottomMargin + 25), writer.DirectContent);
        }
    }

}

谢谢!

2 个答案:

答案 0 :(得分:2)

writer .PageNumber - 1)是最后一页。所以检查一下。

答案 1 :(得分:0)



 public class PageEventHelper : PdfPageEventHelper
    {
        PdfContentByte cb;
        PdfTemplate template;
        private int TotalNumber = 0;

       
        //for remeber lastpage
        public void SetNumber(int num)
        {
            TotalNumber = num;
        }

        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            cb = writer.DirectContent;
            template = cb.CreateTemplate(50, 50);
        }

        public override void OnEndPage(PdfWriter writer, Document document)
        {
            base.OnEndPage(writer, document);
            cb = writer.DirectContent;
            template = cb.CreateTemplate(50, 50);

            BaseFont font = BaseFont.CreateFont();
            int pageN = writer.PageNumber;
            String text = pageN.ToString();
            float len = font.GetWidthPoint(text, 9);
           
            iTextSharp.text.Rectangle pageSize = document.PageSize;

           // cb.SetRGBColorFill(100, 100, 100);
            
            ;
            cb.BeginText();
            cb.SetFontAndSize(font, 9);
            cb.SetTextMatrix(document.LeftMargin, pageSize.GetBottom(document.BottomMargin));
            //cb.ShowText(text);
            
            if (pageN > 1 && TotalNumber==0)
            {
                cb.ShowTextAligned(Element.ALIGN_CENTER, (pageN - 6).ToString() , 300f, 10f, 0);
            }

            cb.EndText();

            cb.AddTemplate(template, document.LeftMargin + len, pageSize.GetBottom(document.BottomMargin));
        }
}




如何使用代码?



 doc.Open();
            //PdfWriter writer = PdfWriter.GetInstance(doc, stream);
            PageEventHelper pageEventHelper = new PageEventHelper();
            writer.PageEvent = pageEventHelper;




在doc.closed()之前 使用函数SetNumber()



pageEventHelper.SetNumber(writer.PageNumber);
            doc.Close();




您可以使用其他数字而不是writer.PageNumber但不能使用0。

希望这对你有帮助!