首页 > 解决方案 > MVC中的iTextSharp,如何在pdf的第3页上添加自定义x,y边距的图像?

问题描述

我正在使用 .NET 平台上的 iTextSharp 在 MVC 项目中创建 PDF。我正在“下载 PDF”功能中发送一个 HTML div,并使用 iTextSharp 类从 c# 代码添加图像,但现在我想在第 3 页上添加一个图像,但不幸的是我无法做到这一点。请帮我。

请找到我为在第一页、最后一页添加图像而编写的以下代码以及在每页上添加图像的循环...(但我不能仅在第三页上添加图像)...

using (MemoryStream stream = new System.IO.MemoryStream())
            {
                string Grid = GridHtml.Replace("<br>", "\n\r");

                StringReader sr = new StringReader(Grid);
                iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(PageSize.A4, 10f, 10f, 100f, 0f);
                pdfDoc.SetMargins(50f, 50f, 90f, 0f);
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
                MyEvent events = new MyEvent();
                writer.PageEvent = events;
                pdfDoc.Open();

                string imageURL1 = Server.MapPath("~/UploadedFiles/Calibehr.png");
                iTextSharp.text.Image jpg12 = iTextSharp.text.Image.GetInstance(imageURL1);
                ////Resize image depend upon your need
                jpg12.ScaleToFit(140f, 120f);
                jpg12.SpacingBefore = 10f;
                //////Give some space after the image
                jpg12.SpacingAfter = 1f;
                jpg12.Alignment = Element.ALIGN_CENTER;

                jpg12.SetAbsolutePosition(40, 750);

                pdfDoc.Add(jpg12);
                if ((fc["hdnFormatType"] != "ManageService"))
                {
                    string imageURL3 = Server.MapPath("~/UploadedFiles/Swati-Sign.png");
                    iTextSharp.text.Image jpgSign = iTextSharp.text.Image.GetInstance(imageURL3);
                    ////Resize image depend upon your need
                    jpgSign.ScaleToFit(140f, 120f);
                    jpgSign.SpacingBefore = 10f;
                    //////Give some space after the image
                    jpgSign.SpacingAfter = 1f;
                    jpgSign.Alignment = Element.ALIGN_LEFT;

                    jpgSign.SetAbsolutePosition(40, 160);
                    //jpg12.
                    pdfDoc.Add(jpgSign);
                }

                string imageURL2 = Server.MapPath("~/UploadedFiles/footer.jpg");
                iTextSharp.text.Image jpgFooter = iTextSharp.text.Image.GetInstance(imageURL2);
                ////Resize image depend upon your need
                jpgFooter.ScaleToFit(140f, 120f);
                jpgFooter.SpacingBefore = 10f;
                //////Give some space after the image
                jpgFooter.SpacingAfter = 1f;
                jpgFooter.Alignment = Element.ALIGN_LEFT;
                jpgFooter.ScaleAbsoluteWidth(510);
                jpgFooter.ScaleAbsoluteHeight(70);
                jpgFooter.SetAbsolutePosition(40, 0);
                //jpg12.
                pdfDoc.Add(jpgFooter);

                XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
                string imageURL4 = Server.MapPath("~/UploadedFiles/Swati-Sign.png");
                iTextSharp.text.Image jpgFooterSign = iTextSharp.text.Image.GetInstance(imageURL4);
                ////Resize image depend upon your need
                jpgFooterSign.ScaleToFit(140f, 120f);
                jpgFooterSign.SpacingBefore = 10f;
                //////Give some space after the image
                jpgFooterSign.SpacingAfter = 1f;
                jpgFooterSign.Alignment = Element.ALIGN_LEFT;
                if ((fc["hdnFormatType"] == "ManageService"))
                {
                    jpgFooterSign.SetAbsolutePosition(20, 150);
                }
                else
                {
                    jpgFooterSign.SetAbsolutePosition(20, 450);
                }
                writer.DirectContent.AddImage(jpgFooterSign, false);
                pdfDoc.Close();
                return File(stream.ToArray(), "application/pdf", CandName + "-" + empId + ".pdf");
            }
        }

标签: c#model-view-controlleritext

解决方案


试试这个:- 设置你想要的位置。

public void AddImage(int pageNumber)
        {
            if (pageNumber > 0)
            {
                string pdfTemplate =

    @"D:\Input.pdf";


                string newFile = @"D:\Output.pdf";
                PdfReader pdfReader = new PdfReader(pdfTemplate);

                PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
                newFile, FileMode.Create));

                AcroFields pdfFormFields = pdfStamper.AcroFields;
                string chartLoc = string.Empty;

                chartLoc = @"C:\img.png";

                iTextSharp.text.Image chartImg = iTextSharp.text.Image.GetInstance(chartLoc);
                iTextSharp.text.pdf.PdfContentByte underContent;

                iTextSharp.text.Rectangle rect;
                try

                {

                    Single X, Y; int pageCount = 0;
                    rect = pdfReader.GetPageSizeWithRotation(1);

                    if (chartImg.Width > rect.Width || chartImg.Height > rect.Height)
                    {

                        chartImg.ScaleToFit(rect.Width, rect.Height);

                        X = (rect.Width - chartImg.ScaledWidth) / 2;

                        Y = (rect.Height - chartImg.ScaledHeight) / 2;

                    }

                    else

                    {

                        X = (rect.Width - chartImg.Width) / 2;

                        Y = (rect.Height - chartImg.Height) / 2;

                    }
                    chartImg.SetAbsolutePosition(X, Y);

                    pageCount = pdfReader.NumberOfPages;
//Below to add image to all pages
                    //for (int i = 1; i < pageCount; i++)
                    //{

                    //    underContent = pdfStamper.GetOverContent(i);//.GetUnderContent(i);

                    //    underContent.AddImage(chartImg);

                    //}

                    if (pageCount >= pageNumber)
                    {
                        underContent = pdfStamper.GetOverContent(pageNumber);//.GetUnderContent(i);

                        underContent.AddImage(chartImg);
                    }





                    pdfStamper.Close();

                    pdfReader.Close();

                }

                catch (Exception ex)
                {

                    throw ex;
                }
            }
        }

推荐阅读