MsNichols
MsNichols

Reputation: 1134

Add Uploaded File(s) to iTextSharp PDF New Page

I'm at the last step in completing a pdf generator. I am using iText sharp and i am able to stamp a base64 image with no problem thanks to help from StackOverflow.

My question is how would I iterate over posted files and add a new page with posted image files on it. Here is my current way of stamping an image... however, its coming from base64. I need to add uploaded images selected from my application to the pdf preferably while the stamper is opened. Just can't seem to make my code work.

I feel this is easy to iterate thru but can't get the logic. Please help:

        PdfContentByte pdfContentByte = stamper.GetOverContent(1);
        PdfContentByte pdfContentByte2 = stamper.GetOverContent(4);
        var image = iTextSharp.text.Image.GetInstance(
            Convert.FromBase64String(match.Groups["data"].Value)
        );
        image.SetAbsolutePosition(270, 90);
        image.ScaleToFit(250f, 100f);
        pdfContentByte.AddImage(image);

//stamping base64 image works perfect - now i need to stamp the uploaded images onto a new page in the same document before stamper closes.

        var imagepath = "//test//";
        HttpFileCollection uploadFilCol = HttpContext.Current.Request.Files;
        for (int i = 0; i < uploadFilCol.Count; i++)
        {
            HttpPostedFile file = uploadFilCol[i];

            using (FileStream fs = new FileStream(imagepath +  "Invoice-" +

            HttpContext.Current.Request.Form.Get("genUUID") + file, FileMode.Open))
            {
                HttpPostedFile file = uploadFilCol[i];

                pdfContentByte2.AddImage(file);

            }

        }

My posted files comes from input form on an html page

<input type="file" id="file" name="files[]" runat="server" multiple />

Upvotes: 1

Views: 1536

Answers (1)

goTo-devNull
goTo-devNull

Reputation: 9372

The basic steps:

  • Iterate over the HttpFileCollection.
  • Read each HttpPostedFile into a byte array.
  • Create iText Image with byte array in previous step.
  • Set the image absolute position, and optionally scale as needed.
  • Add image at specified page number with GetOverContent()

A quick snippet to get you started. Not tested, and assumes you have PdfReader, Stream, and PdfStamper setup, along with a working file upload:

HttpFileCollection uploadFilCol = HttpContext.Current.Request.Files;
for (int i = 0; i < uploadFilCol.Count; i++)
{
    HttpPostedFile postedFile = uploadFilCol[i];
    using (var br = new BinaryReader(postedFile.InputStream))
    {
        var imageBytes = br.ReadBytes(postedFile.ContentLength);
        var image = Image.GetInstance(imageBytes);

        // still not sure if you want to add a new blank page, but 
        // here's how
        //stamper.InsertPage(
        //    APPEND_NEW_PAGE_NUMBER, reader.GetPageSize(APPEND_NEW_PAGE_NUMBER - 1)
        //);

        // image absolute position
        image.SetAbsolutePosition(absoluteX, absoluteY);

        // scale image if needed
        // image.ScaleAbsolute(...);

        // PAGE_NUMBER => add image to specific page number
        stamper.GetOverContent(PAGE_NUMBER).AddImage(image);
    }
}

Upvotes: 2

Related Questions