几天来我一直在努力解决这个问题,在任何地方都找不到解决方案,我唯一想到的就是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);
}
到底是怎么了?
压模在被丢弃时会关闭内部流。在创建压模的行下方添加此行:
pdfStamper.Writer.CloseStream = false;