【发布时间】:2020-03-09 17:41:48
【问题描述】:
我正在使用 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 来完成它的工作?所以我可以上传这个新编辑的文件吗?
更新
我试过这个:
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();
}
但是得到了这个错误:
无法访问已关闭的 Stream。
我可以看到文件正在上传到我的 OneDrive,但是当我打开它时出现以下错误:
加载 PDF 文档失败。
我在这里做错了什么?
更新
当我删除最后两行时:
pdfStamper.Close();
pdfReader.Close();
我不再收到无法访问已关闭的流错误,我的文件已上传,但打开时出现错误:
加载 PDF 文档失败。
更新
当我尝试这个时
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 对其进行编辑。
【问题讨论】:
标签: c# asp.net itext microsoft-graph-api