我正在使用itext7来获取文件流并填写表单字段。
这是我的代码:
using (MemoryStream outFile = new MemoryStream())
{
var streamFile = await App.GraphClient.Me.Drive.Items[item.Id].Content.Request().GetAsync();
using (PdfDocument pdf = new PdfDocument(new PdfReader(streamFile)))
{
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, true);
IDictionary<String, PdfFormField> fields = form.GetFormFields();
PdfFormField toSet;
fields.TryGetValue("Full_Names", out toSet);
toSet.SetValue(Customer_Name.Text);
form.FlattenFields();
pdf.Close();
}
}
但是在此行出现错误:toSet.SetValue(Customer_Name.Text);
尝试设置该值时,错误是:
没有关联的PdfWriter用于进行间接。
我的问题是我在做什么错,我该如何解决?我正在使用Microsoft Graph API从OneDrive获取文件。字段的IDictionary正在填充,并且我尝试为其设置值的字段名称是准确的。
代码的问题是,您有专用的outFile
流用于输出结果(具有扁平字段的文档,但是您没有告诉iText有关该所需输出目标的任何信息。
PdfDocument
有几个构造函数,而您正在使用的是PdfDocument(PdfReader)
,它专用于读取文档,而不是对其进行更改(并且设置一个值当然被认为是在更改文档)。因此,您应该使用PdfDocument(PdfReader, PdfWriter)
构造函数为iText提供源文档和目标目的地。
您应该按如下方式创建PdfDocument
:
PdfDocument pdf = new PdfDocument(new PdfReader(streamFile), new PdfWriter(outFile))
执行结束时,您的outFile
流将包含结果文档的字节。