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;
几天来我一直在为这个问题苦苦挣扎,到处都找不到解决方案,我唯一能想到的就是 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;