将字符串输入 PdfFormField 删除或替换为按钮,以便我可以使用 iText 7 Core c# 添加图像

Remove or replace string input PdfFormField to a button so I can add an image using iText 7 Core c#

我想知道是否有人可以帮助我,我有一个现有的 PDF 模板文件,我希望能够将 PdfFormField 更改为按钮以便我可以添加图像。

我似乎无法 remove/replace 将字符串输入到按钮,因此我可以将图像添加为图标,甚至将其更改为图像。请在下面查看我的尝试,如果有任何帮助,我将不胜感激。

我在这里查看了 Itext7 手册页和其他问题,但我似乎无法让它工作。我想知道这是否可能。

填写表格的处理方法

private byte[] FillForm(Dictionary<string, string> items)
{
    using var memoryStream = new MemoryStream();
    var pdfDoc = new PdfDocument(new PdfReader(_template), new PdfWriter(memoryStream));
    var form = PdfAcroForm.GetAcroForm(pdfDoc, true);
    var fields = form.GetFormFields();

    items.Aggregate(fields, (current, item) => UpdateDictionaryEntry(current, item.Key, item.Value, pdfDoc));

    form.FlattenFields();
    pdfDoc.Close();
    return memoryStream.ToArray();
}

并写入值:(我已将其更改为尝试删除每个表单字段并将其更改为使用它调整大小的按钮,但仍然没有成功)

private static IDictionary<string, PdfFormField> UpdateDictionaryEntry(IDictionary<string, PdfFormField> formFields, string key, string value, PdfDocument form)
{
    if (!formFields.ContainsKey(key))
        return formFields;

    formFields.TryGetValue(key, out var toSet);
    // toSet?.SetValue(value);

    var sizingArray = toSet.GetWidgets()[0].GetRectangle();

    formFields.Remove(key);

    var button = PdfFormField.CreatePushButton(
                    form, new Rectangle(sizingArray.GetAsNumber(0).FloatValue(),
                                             sizingArray.GetAsNumber(1).FloatValue(),
                                          sizingArray.GetAsNumber(2).FloatValue(),
                                         sizingArray.GetAsNumber(3).FloatValue()),
                    key, "Test Me");
    formFields.Add(key, button);

    formFields.TryGetValue(key, out var testy);

    return formFields;
}

更新:

我试过检索字段的坐标,然后删除字段并在这些坐标处添加一个新按钮。但是我不确定我是否采取了正确的方法并且它没有像上面那样工作。

我犯的错误是使用:

formFields.Remove(key);

如果是:

 form.ReplaceField(key, button);

基本上我所做的如下(高度、宽度计算和 x、y):

        formFields.TryGetValue(key, out var toSet);

        PdfArray sizingArray = toSet.GetWidgets()[0].GetRectangle();
        var width = (float)(sizingArray.GetAsNumber(2).GetValue() - sizingArray.GetAsNumber(0).GetValue());
        var height = (float)(sizingArray.GetAsNumber(3).GetValue() - sizingArray.GetAsNumber(1).GetValue());

        var imagbase64 = imaged.Draw(image);

        var button = PdfFormField.CreatePushButton(
            pdfDoc, new Rectangle(sizingArray.GetAsNumber(0).FloatValue(),
                sizingArray.GetAsNumber(1).FloatValue(),
                width,
                height), key, "");
        button.SetValue(imagbase64);

        form.ReplaceField(key, button);