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

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

几天来我一直在努力解决这个问题,在任何地方都找不到解决方案,我唯一想到的就是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(它也需要Stream):

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

但我收到此错误:

无法访问关闭的流。

在此行:

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

到底是怎么了?

c# asp.net itext
1个回答
1
投票

压模在被丢弃时会关闭内部流。在创建压模的行下方添加此行:

pdfStamper.Writer.CloseStream = false;
© www.soinside.com 2019 - 2024. All rights reserved.