Найдите номер страницы объекта iTextSharp


Я пытаюсь записать изображение на определенную страницу pdf-файла с помощью iTextSharp. К сожалению, у меня есть около 10 или 15 различных pdf-файлов, в которых мне нужно разместить изображение на другой странице.

Пример: PDFFile1: изображение переходит на страницу 3,

PDFFile2: изображение переходит на страницу 6,

PDFFile3: изображение переходит на страницу 5 и т. д...

Мой текущий код вытягивает количество страниц и записывает изображение на самой последней странице. Как я могу вытащить номер страницы, где текстовое поле объект "образ" расположен?

    private void writePDF(string PhysicalName)
    { 
   try
            {
            string pdfTemplate = HttpContext.Current.Server.MapPath("Documents\" + PhysicalName);
            string ConsentTemplateName = PhysicalName.Replace(".pdf", "");
            string newFile = HttpContext.Current.Server.MapPath("Documents\").ToString() + ConsentTemplateName + Session["Number"].ToString() + ".pdf";
string NewConsentPhysicalPath;
            NewConsentPhysicalPath = newFile;
            PdfReader pdfReader = new PdfReader(pdfTemplate);
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create));
            pdfStamper.SetEncryption(PdfWriter.STANDARD_ENCRYPTION_128, null, null, PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING);
            AcroFields pdfFormFields = pdfStamper.AcroFields;

iTextSharp.text.Rectangle rect = pdfStamper.AcroFields.GetFieldPositions("Image")[0].position;
            string imageFilePath = HttpContext.Current.Server.MapPath("Documents\Images" + Convert.ToInt64(Session["Number"].ToString()) + ".png");
            iTextSharp.text.Image png = iTextSharp.text.Image.GetInstance(imageFilePath);
            png.ScaleAbsolute(rect.Width, rect.Height);
            png.SetAbsolutePosition(rect.Left, rect.Bottom);
            int numOfPages = pdfReader.NumberOfPages;
            pdfStamper.GetOverContent(numOfPages).AddImage(png); //Get page number of "Image"
            pdfStamper.Close();    
   }
            catch (Exception ex)
            {
                Response.Write(ex.Message.ToString());
            }
        }
1 2

1 ответ:

Как уже указывалось в моем комментарии Сегодня утром:

Вы уже используете position член класса FieldPosition:

Rectangle rect = pdfStamper.AcroFields.GetFieldPositions("Image")[0].position;

FieldPosition однако он может предложить больше; он определяется как:

public class FieldPosition {
    public int page;
    public Rectangle position;
}
Таким образом, номер страницы, который вы просите, равен
int page = pdfStamper.AcroFields.GetFieldPositions("Image")[0].page;