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

我再也不能访问关闭的流错误了,我的文件上传了,但当我打开它时,我得到了一个错误:

加载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编辑它。

看看这是否有助于您:

我需要将流(C#(重置回起始位置吗?

一旦你阅读了一个流,你需要把它重置回开头,用它做其他事情

最新更新