我正在使用Microsoft API Graph API从OneDrive中获取PDF文件,我已通过此行成功获取此文件:
var streamFile = await graphClient.Me.Drive.Items["{item-id}"].Content.Request().GetAsync();
现在,我想获取此文件的流并使用iTextSharp对其进行编辑
using (MemoryStream outFile = new MemoryStream())
{
//Dont know what to replace this with
PdfReader pdfReader = new PdfReader("Uploads/Document.pdf");
PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);
AcroFields fields = pdfStamper.AcroFields;
fields.SetField("Full_Names", "aaa");
pdfStamper.Close();
pdfReader.Close();
}
然后将其上传回OneDrive,我可以通过此方法执行此操作:
//Don't know what to replace this with
var uploadPath = System.Web.HttpContext.Current.Server.MapPath("~/Uploads/NewDocument.pdf");
byte[] data = System.IO.File.ReadAllBytes(uploadPath);
Stream stream = new MemoryStream(data);
await graphClient.Me.Drive.Items["{item-id}"].ItemWithPath("NewDocument.pdf").Content.Request().PutAsync<DriveItem>(stream);
所以,我的问题是如何拿走我得到的文件并使用iTextSharp来完成它的工作?这样我就可以上传这个新的编辑文件了?
UPDATE
我尝试过:
var streamFile = await graphClient.Me.Drive.Items["{item-id}"].Content.Request().GetAsync();
using (MemoryStream outFile = new MemoryStream())
{
PdfReader pdfReader = new PdfReader(streamFile);
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.Close();
pdfReader.Close();
}
但是出现此错误:
无法访问关闭的流。
我可以看到文件正在上传到我的OneDrive,但是当我打开它时出现此错误:
无法加载PDF文档。
我在这里做错了什么?
UPDATE
当我删除最后两行时:
pdfStamper.Close();
pdfReader.Close();
我不再收到无法访问已关闭的Stream错误,我的文件上传了,但是打开时出现错误:
无法加载PDF文档。
UPDATE
当我尝试这个时
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);
它会上传我抓取的文件,因此该部分可以正常工作,但是我无法使用iTextSharp对其进行编辑。