Xamarin.Forms itext7-没有关联的PdfWriter用于进行间接创建

问题描述 投票:0回答:1

我正在使用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正在填充,并且我尝试为其设置值的字段名称是准确的。

c# xamarin.forms itext itext7
1个回答
0
投票

代码的问题是,您有专用的outFile流用于输出结果(具有扁平字段的文档,但是您没有告诉iText有关该所需输出目标的任何信息。

PdfDocument有几个构造函数,而您正在使用的是PdfDocument(PdfReader),它专用于读取文档,而不是对其进行更改(并且设置一个值当然被认为是在更改文档)。因此,您应该使用PdfDocument(PdfReader, PdfWriter)构造函数为iText提供源文档和目标目的地。

您应该按如下方式创建PdfDocument

PdfDocument pdf = new PdfDocument(new PdfReader(streamFile), new PdfWriter(outFile))

执行结束时,您的outFile流将包含结果文档的字节。

© www.soinside.com 2019 - 2024. All rights reserved.