C# 删除或替换按钮的字符串输入PdfFormField,以便我可以使用iText 7 Core c添加图像#
我想知道是否有人可以帮助我,我有一个现有的PDF模板文件,我想能够改变一个按钮,使我可以添加一个图像PdfFormField 我似乎无法删除/替换按钮的字符串输入,以便添加图像作为图标,甚至将其更改为图像。请看下面我的尝试,我将非常感谢任何帮助,即使这是可能的 我已经看了Itext7手册页和其他问题,我似乎无法让它工作。我想知道这是否可能 方法来处理以填充表单C# 删除或替换按钮的字符串输入PdfFormField,以便我可以使用iText 7 Core c添加图像#,c#,pdf,.net-core,itext,itext7,C#,Pdf,.net Core,Itext,Itext7,我想知道是否有人可以帮助我,我有一个现有的PDF模板文件,我想能够改变一个按钮,使我可以添加一个图像PdfFormField 我似乎无法删除/替换按钮的字符串输入,以便添加图像作为图标,甚至将其更改为图像。请看下面我的尝试,我将非常感谢任何帮助,即使这是可能的 我已经看了Itext7手册页和其他问题,我似乎无法让它工作。我想知道这是否可能 方法来处理以填充表单 private byte[] FillForm(Dictionary<string, string> items) {
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 byte[]FillForm(字典项)
{
使用var memoryStream=new memoryStream();
var pdfDoc=新的PdfDocument(新的PdfReader(_模板),新的PdfWriter(memoryStream));
var form=PdfAcroForm.GetAcroForm(pdfDoc,true);
var fields=form.GetFormFields();
聚合(字段,(当前,项目)=>UpdateDictionaryEntry(当前,项目.键,项目.值,pdfDoc));
form.flattfields();
pdfDoc.Close();
返回memoryStream.ToArray();
}
并编写值:(我将此更改为仅尝试删除每个表单字段,并将其更改为一个按钮,使用它调整大小,但仍然没有成功)
private static IDictionary UpdateDictionaryEntry(IDictionary formFields、字符串键、字符串值、PdfDocument表单)
{
如果(!formFields.ContainsKey(键))
返回表单字段;
formFields.TryGetValue(键,out var toSet);
//设置?设置值(值);
var sizingArray=toSet.GetWidgets()[0].GetRectangle();
formFields.Remove(键);
var button=PdfFormField.createbutton(
表单,新矩形(sizingArray.GetAsNumber(0).FloatValue(),
sizingArray.GetAsNumber(1.FloatValue(),
sizingArray.GetAsNumber(2.FloatValue(),
sizingArray.GetAsNumber(3.FloatValue()),
键,“测试我”);
添加(键、按钮);
TryGetValue(key,out var testy);
返回表单字段;
}
更新:
我尝试检索字段的坐标,然后删除字段并在这些坐标处添加一个新按钮。但是我不确定我是否采取了正确的方法,它没有像上面那样工作。我犯的错误是使用了:
formFields.Remove(key);
如果不是:
form.ReplaceField(key, button);
所以基本上我所做的如下(高度,宽度计算和x,y):
如何检索字段的坐标,删除字段并在这些坐标处添加新按钮?非按钮和按钮无论如何都是如此不同,保留其他属性几乎没有意义…@mki你能举个例子吗
form.ReplaceField(key, button);
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);