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

问题描述

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

我似乎无法删除/替换输入到按钮上的字符串,因此我可以将图像添加为图标,甚至可以更改图像。请在下面查看我的尝试,即使有可能,我也将不胜感激。

我在这里查看过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);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...