1

I am using Microsoft API Graph API to get a PDF file from my OneDrive which I have successfully got via this line:

var streamFile = await graphClient.Me.Drive.Items["{item-id}"].Content.Request().GetAsync();

Now I want to take a the stream of this file and edit it with iTextSharp

using (MemoryStream outFile = new MemoryStream())
{

    //Dont know what to replace this with

    PdfReader pdfReader = new PdfReader("Uploads/Document.pdf");

    PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);

    AcroFields fields = pdfStamper.AcroFields;

    fields.SetField("Full_Names", "aaa");

    pdfStamper.Close();

    pdfReader.Close();

}

And then upload it back to OneDrive, which I am able to do via this:

//Don't know what to replace this with

var uploadPath = System.Web.HttpContext.Current.Server.MapPath("~/Uploads/NewDocument.pdf");

byte[] data = System.IO.File.ReadAllBytes(uploadPath);

Stream stream = new MemoryStream(data);

await graphClient.Me.Drive.Items["{item-id}"].ItemWithPath("NewDocument.pdf").Content.Request().PutAsync<DriveItem>(stream);

So my question is how do I take my file that I got and use iTextSharp to do its thing? So I can upload this new edited file?

UPDATE

I tried this:

var streamFile = await graphClient.Me.Drive.Items["{item-id}"].Content.Request().GetAsync();

            using (MemoryStream outFile = new MemoryStream())
            {
                PdfReader pdfReader = new PdfReader(streamFile);
                PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);
                AcroFields fields = pdfStamper.AcroFields;

                fields.SetField("Full_Names", "JIMMMMMMAYYYYY");

                await graphClient.Me.Drive.Items["{item-id}"].ItemWithPath("NewDocument-2.pdf").Content.Request().PutAsync<DriveItem>(outFile);

                pdfStamper.Close();
                pdfReader.Close();
            }

But got this error:

Cannot access a closed Stream.

I can see the file is being uploaded to my OneDrive, but when I goto open it I get this error:

Failed to load PDF document.

What am I doing wrong here?

UPDATE

When I remove these last two lines:

pdfStamper.Close();
pdfReader.Close();

I don't get Cannot access a closed Stream error anymore, my file uploads but I get an error when I open it:

Failed to load PDF document.

UPDATE

When I try this

var streamFile = await graphClient.Me.Drive.Items["{item-id}"].Content.Request().GetAsync();

await graphClient.Me.Drive.Items["{item-id}"].ItemWithPath("NewDocument-2.pdf").Content.Request().PutAsync<DriveItem>(streamFile);

It uploads the file I grabbed, so that part is working, but I can't edit it with iTextSharp.

user979331
  • 11,039
  • 73
  • 223
  • 418

1 Answers1

0

See if this helps you along:

Do I need to reset a stream(C#) back to the start?

Once you read a stream, you need to reset it back to the beginning to do something else with it.

Randy Slavey
  • 544
  • 4
  • 19