【问题标题】:c# - iTextSharp - Cannot access a closed Streamc# - iTextSharp - 无法访问关闭的流
【发布时间】:2019-11-14 19:25:26
【问题描述】:

我这几天一直在努力解决这个问题,在任何地方都找不到解决方案,我唯一能想到的是 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);

但我收到此错误:

无法访问已关闭的 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);
}

到底出了什么问题?

【问题讨论】:

标签: c# asp.net itext


【解决方案1】:

压模在处理后关闭内部流。在您创建压模的行下方添加此行:

pdfStamper.Writer.CloseStream = false;

【讨论】:

  • 我试过了,我没有再收到错误,我的文件被上传了,但是 PDF 被破坏了,说“加载 PDF 文档失败。”
  • 在处理完压模之后,但在使用之前尝试刷新流并将其位置设置为 0。
  • @user979331 没问题!祝你好运!
猜你喜欢
  • 2020-03-09
  • 2021-01-08
  • 1970-01-01
  • 2022-11-14
  • 2012-10-11
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多