c# - iTextSharp - 无法访问已关闭的流

c# - iTextSharp - Cannot access a closed Stream

几天来我一直在为这个问题苦苦挣扎,到处都找不到解决方案,我唯一能想到的就是 iTextSharp 不起作用....

首先我像这样创建一个 MemoryStream:

MemoryStream outFile = new MemoryStream();

我这里有这个流:

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

这是来自 Microsoft OneDrive 的 PDF 文件

然后我将这个 Stream 分配给 iTextSharp 的 PdfReader,如下所示:

PdfReader pdfReader = new PdfReader(streamFile);

然后我使用 PDFStamper 对 PDF 文件进行编辑,如下所示:

PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);

然后我会这样编辑:

AcroFields fields = pdfStamper.AcroFields;
fields.SetField("Full_Names", "JIMMMMMMAYYYYY");

然后我将文件重新上传到 OneDrive(也需要一个流),如下所示:

等待graphClient.Me.Drive.Items["item-id"].ItemWithPath("NewDocument-2.pdf").Content.Request().PutAsync(outFile);

但是我得到这个错误:

Cannot access a closed Stream.

这一行:

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

当我刚从 OneDrive 获取文件并像这样上传时:

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

有效!我能够获取文件并重新上传它,所以它根本不是 PDF 文件的问题,iTextSharp 坏了我已经尝试了多种方法,但没有任何效果。 iTextSharp 做错了什么?这是我的完整代码:

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

    using (PdfReader pdfReader = new PdfReader(streamFile))
    {
         using (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.Writer.CloseStream = false;