删除或替换一个按钮的字符串输入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);

相关内容

最新更新