C#-具有iTextSharp的Microsoft Graph API-无法访问关闭的流

我正在使用microsoft API Graph API从OneDrive中获取PDF文件,该文件已通过此行成功获取:

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

现在,我想获取此文件的流并使用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();

}

然后将其上传回OneDrive,我可以通过以下方式完成此操作:

//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);

所以我的问题是我如何拿取我的文件并使用iTextSharp来做它的事情?这样我就可以上传这个新的编辑文件了吗?

更新

我尝试过:

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

但是出现此错误:

  

无法访问关闭的流。

我可以看到文件正在上传到OneDrive,但是当我打开它时,出现此错误:

  

无法加载PDF文档。

我在这里做什么错了?

更新

当我删除最后两行时:

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

我不会再收到“无法访问已关闭的Stream错误”,我的文件已上传,但是在打开它时出现错误:

  

无法加载PDF文档。

更新

当我尝试这个

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

它会上传我抓取的文件,以便该部分正常工作,但是我无法使用iTextSharp对其进行编辑。

wenwen322079 回答:C#-具有iTextSharp的Microsoft Graph API-无法访问关闭的流

看看这是否对您有帮助:

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

阅读流之后,您需要将其重置回开始以对其进行其他操作。

本文链接:https://www.f2er.com/3106874.html

大家都在问