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

问题描述 投票:1回答:1

我正在使用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来完成它的工作?这样我就可以上传这个新的编辑文件了?

UPDATE

我尝试过:

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文档。

我在这里做错了什么?

UPDATE

当我删除最后两行时:

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

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

无法加载PDF文档。

UPDATE

当我尝试这个时

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# asp.net itext microsoft-graph
1个回答
0
投票

看看这是否对您有帮助:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.