C# 使用iText7和ASP.NET C在PDF文件的页脚中添加页码#

C# 使用iText7和ASP.NET C在PDF文件的页脚中添加页码#,c#,asp.net,itext7,C#,Asp.net,Itext7,我可以使用iText7和C#ASP.NET创建pdf文件 此pdf文件共包含9页 我试图在代码中添加总页数和一条虚线 但我有两个问题 页数(第1页,共9页,第2页,第3页,共9页…)仅显示在PDF文件的第8页和第9页中 虚线没有显示在第一页 任何帮助都将不胜感激。。。多谢各位 下面是我的代码 private void mtpdfnew() { DataTable dt = new DataTable(); filename = @"C:\inetpub\wwwroot

我可以使用iText7和C#ASP.NET创建pdf文件

此pdf文件共包含9页

我试图在代码中添加总页数和一条虚线

但我有两个问题

  • 页数(第1页,共9页,第2页,第3页,共9页…)仅显示在PDF文件的第8页和第9页中
  • 虚线没有显示在第一页
  • 任何帮助都将不胜感激。。。多谢各位

    下面是我的代码

    private void mtpdfnew()
    {
        DataTable dt = new DataTable();
    
        filename = @"C:\inetpub\wwwroot\public\pdf\" +
            DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
    
        PdfWriter writer = new PdfWriter(filename);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);
    
        using (MySqlConnection myConnectionString =
           new MySqlConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
        {
            using (MySqlCommand cmd =
                new MySqlCommand("SP", myConnectionString))
            {
                cmd.Connection.Open();
                cmd.CommandType = CommandType.StoredProcedure;
    
                using (MySqlDataAdapter da =
                    new MySqlDataAdapter(cmd))
                {
                    da.Fill(dt);
    
                    if (dt.Rows.Count > 0)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            contents = new Paragraph(dt.Rows[i]["contents"].ToString())
                                .SetTextAlignment(TextAlignment.JUSTIFIED)
                                .SetFontSize(12);
    
                            if (dt.Rows[i]["contents"].ToString().StartsWith("Set") && i != 0)
                            {
                                document.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
                                document.Add(new LineSeparator(new DottedLine(1, 2)).SetMarginTop(4));
                            }
    
                            List<IElement> lst = HtmlConverter.ConvertToElements(dt.Rows[i]["contents"].ToString()).ToList();
    
                            for (int j = 0; j < lst.Count; j++)
                            {
                                IBlockElement element = (IBlockElement)lst[j];
    
                                if (dt.Rows[i]["contents"].ToString().StartsWith("Set"))
                                {
                                    contents.SetFontSize(12)
                                        .SetBold()
                                        .SetFontColor(ColorConstants.BLUE);
                                }
                                else if (dt.Rows[i]["contents"].ToString().StartsWith("- "))
                                {
                                    contents.SetFontSize(10)
                                        .SetBold()
                                        .SetFontColor(ColorConstants.BLACK);
                                }
                                else
                                {
                                    contents.SetTextAlignment(TextAlignment.JUSTIFIED_ALL)
                                        .SetFontSize(10)
                                        .SetFontColor(ColorConstants.BLACK);
    
                                }
    
                                element.SetProperty(Property.LEADING, new Leading(Leading.MULTIPLIED, -1f));
                                document.Add(element);
                            }
                        }
    
                        Footer footerHandler = new Footer();
                        pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, footerHandler);
                        footerHandler.WriteTotal(pdf);
                        dest = filename.ToString();
                        document.Close();
                    }
    
                    Response.Clear();
                    Response.ContentType = "application/pdf";
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + dest);
                    Response.TransmitFile(dest);
                    Response.End();
                }
            }
        }
    }
    
    private class TableFooterEventHandler : IEventHandler
    {
        private Table table;
    
        public TableFooterEventHandler(Table table)
        {
            this.table = table;
        }
    
        public void HandleEvent(Event currentEvent)
        {
            PdfDocumentEvent docEvent = (PdfDocumentEvent)currentEvent;
            PdfDocument pdfDoc = docEvent.GetDocument();
            PdfPage page = docEvent.GetPage();
    
            int pageNumber = pdfDoc.GetPageNumber(page);
            Rectangle pageSize = page.GetPageSize();
    
            PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
            new Canvas(canvas, new Rectangle(36, 20, page.GetPageSize().GetWidth() - 72, 50))
                .Add(table)
                .Close();
        }
    }
    
    protected class Footer : IEventHandler
    {
        protected PdfFormXObject placeholder;
        protected float side = 20;
        protected float x = 300;
        protected float y = 25;
        protected float space = 4.5f;
        protected float descent = 3;
    
        public Footer()
        {
            placeholder = new PdfFormXObject(new Rectangle(0, 0, side, side));
        }
    
        public virtual void HandleEvent(Event @event)
        {
            PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
            PdfDocument pdf = docEvent.GetDocument();
            PdfPage page = docEvent.GetPage();
            int pageNumber = pdf.GetPageNumber(page);
            Rectangle pageSize = page.GetPageSize();
    
            PdfCanvas pdfCanvas = new PdfCanvas(page);
            Canvas canvas = new Canvas(pdfCanvas, pageSize);
            canvas.SetFontSize(10);
    
            Paragraph p = new Paragraph()
                .Add("Page ")
                .Add(pageNumber.ToString())
                .Add(" of");
    
            canvas.ShowTextAligned(p, x, y, TextAlignment.RIGHT);
            canvas.Close();
    
            pdfCanvas.AddXObjectAt(placeholder, x + space, y - descent);
            pdfCanvas.Release();
        }
    
        public void WriteTotal(PdfDocument pdfDoc)
        {
            Canvas canvas = new Canvas(placeholder, pdfDoc);
            canvas.SetFontSize(10);
            canvas.ShowTextAligned(pdfDoc.GetNumberOfPages().ToString(),
                0, descent, TextAlignment.LEFT);
            canvas.Close();
        }
    }
    
    private class TableHeaderEventHandler : IEventHandler
    {
        private Table table;
        private float tableHeight;
        private Document doc;
    
        public TableHeaderEventHandler(Document doc)
        {
            this.doc = doc;
            InitTable();
    
            TableRenderer renderer = (TableRenderer)table.CreateRendererSubTree();
            renderer.SetParent(new DocumentRenderer(doc));
    
            LayoutResult result = renderer.Layout(new LayoutContext(new LayoutArea(0, PageSize.A4)));
            tableHeight = result.GetOccupiedArea().GetBBox().GetHeight();
        }
    
        public void HandleEvent(Event currentEvent)
        {
            PdfDocumentEvent docEvent = (PdfDocumentEvent)currentEvent;
            PdfDocument pdfDoc = docEvent.GetDocument();
            PdfPage page = docEvent.GetPage();
            int pageNum = docEvent.GetDocument().GetPageNumber(page);
            PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
            PageSize pageSize = pdfDoc.GetDefaultPageSize();
            float coordX = pageSize.GetX() + doc.GetLeftMargin();
            float coordY = pageSize.GetTop() - doc.GetTopMargin();
            float width = pageSize.GetWidth() - doc.GetRightMargin() - doc.GetLeftMargin();
            float height = GetTableHeight();
    
            Rectangle rect = new Rectangle(coordX, coordY, width, height);
    
            new Canvas(canvas, rect)
                .Add(table)
                .Close();
        }
    
        public float GetTableHeight()
        {
            return tableHeight;
        }
    
        private void InitTable()
        {
    
        }
    }
    
    private void mtpdfnew()
    {
    DataTable dt=新的DataTable();
    文件名=@“C:\inetpub\wwwroot\public\pdf\”+
    DateTime.Now.ToString(“yyyyMMddHHmmss”)+“.pdf”;
    PdfWriter writer=新的PdfWriter(文件名);
    PdfDocument pdf=新PdfDocument(编写器);
    文件=新文件(pdf);
    使用(MySqlConnection)myConnectionString=
    新的MySqlConnection(ConfigurationManager.ConnectionString[“cn”].ConnectionString))
    {
    使用(mysqlcmd)命令=
    新的MySqlCommand(“SP”,myConnectionString))
    {
    cmd.Connection.Open();
    cmd.CommandType=CommandType.storedProcess;
    使用(MySqlDataAdapter)=
    新的MySqlDataAdapter(cmd))
    {
    da.填充(dt);
    如果(dt.Rows.Count>0)
    {
    对于(int i=0;i