Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除或替换按钮的字符串输入PdfFormField,以便我可以使用iText 7 Core c添加图像#_C#_Pdf_.net Core_Itext_Itext7 - Fatal编程技术网

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

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) {

我想知道是否有人可以帮助我,我有一个现有的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 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);