【发布时间】: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);
}
到底出了什么问题?
【问题讨论】: