2 votes

Localiser le numéro de page d'un objet iTextSharp

J'essaie d'écrire une image sur une page spécifique d'un fichier pdf en utilisant iTextSharp. Malheureusement, j'ai environ 10 ou 15 fichiers pdf différents dans lesquels je dois placer l'image sur une page différente.

Exemple : Fichier PDF1 : l'image se trouve à la page 3,

PDFFile2 : L'image va à la page 6,

PDFFile3 : L'image va à la page 5 etc...

Mon code actuel extrait le nombre de pages et écrit l'image sur la toute dernière page. Comment puis-je obtenir le numéro de page où se trouve l'objet "Image" de la boîte de texte ?

    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());
            }
        }

1voto

mkl Points 13928

Comme je l'ai déjà indiqué dans mon commentaire de ce matin :

Vous utilisez déjà la fonction position membre de la FieldPosition classe :

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

FieldPosition a cependant plus à offrir ; il est défini comme suit :

public class FieldPosition {
    public int page;
    public Rectangle position;
}

Ainsi, le numéro de page que vous demandez est

int page = pdfStamper.AcroFields.GetFieldPositions("Image")[0].page;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X