/// <summary>
        ///   Sets the fields in the pdf stamper with the given object data.
        ///   Based on the framework, it's easier to use an anonymous-object to fill the pdf.
        /// </summary>
        /// <param name="pdfStamper">The pdf stamper to use.</param>
        /// <param name="data">The data to set.</param>
        public static void SetFields(this PdfStamper pdfStamper, object data)
        {
            if (pdfStamper.IsXfaCompliant())
            {
                pdfStamper.AcroFields.Xfa.FillXfaForm(data.ToXfaCompliantXml());
            }
            else
            {
                foreach (var fieldName in pdfStamper.GetFieldNames())
                {
                    var valToSet = data.GetPropertyValue <object>(fieldName);

                    var isImageData = valToSet.IsNotNull() && valToSet.GetType() == typeof(byte[]);
                    if (isImageData && pdfStamper.GetFieldPosition(fieldName, out var fieldPos))
                    {
                        var image = Image.GetInstance((byte[])valToSet);
                        pdfStamper.GetOverContent(fieldPos.page).AddImage(image.SetImageMetrics(fieldPos));
                    }
                    else
                    {
                        pdfStamper.AcroFields.SetField(fieldName, valToSet.ToStringSafe());
                    }
                }
            }
        }