如何解决删除字符串输入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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。