ImageFieldMergingArgs

ImageFieldMergingArgs class

يوفر بيانات لـImageFieldMerging حدث.

لمعرفة المزيد، قم بزيارةدمج البريد وإعداد التقارير مقالة توثيقية.

public class ImageFieldMergingArgs : FieldMergingArgsBase

الخصائص

اسموصف
Document { get; }إرجاعDocument الكائن الذي يتم تنفيذ دمج البريد له.
DocumentFieldName { get; }يحصل على اسم حقل الدمج كما هو محدد في الوثيقة.
Field { get; }الحصول على الكائن الذي يمثل حقل الدمج الحالي.
FieldName { get; }الحصول على اسم حقل الدمج في مصدر البيانات.
FieldValue { get; set; }الحصول على قيمة الحقل أو تعيينها من مصدر البيانات.
Image { get; set; }تحديد الصورة التي يجب على محرك دمج المراسلات إدراجها في المستند.
ImageFileName { get; set; }يعين اسم ملف الصورة التي يجب على محرك دمج المراسلات إدراجها في المستند.
ImageHeight { get; set; }يحدد ارتفاع الصورة المراد إدراجها في المستند.
ImageStream { get; set; }تحديد الدفق لمحرك دمج المراسلات لقراءة الصورة منه.
ImageWidth { get; set; }يحدد عرض الصورة المراد إدراجها في المستند.
RecordIndex { get; }الحصول على الفهرس الصفري للسجل الذي يتم دمجه.
Shape { get; set; }تحديد الشكل الذي يجب على محرك دمج المراسلات إدراجه في المستند.
TableName { get; }يحصل على اسم جدول البيانات لعملية الدمج الحالية أو سلسلة فارغة إذا كان الاسم غير متاح.

ملاحظات

يحدث هذا الحدث أثناء دمج البريد عند مواجهة حقل merge لبريد الصورة في المستند. يمكنك الرد على هذا الحدث لإرجاع اسم ملف a أو دفق أو ملفImage كائن إلى محرك merge البريد بحيث يتم إدراجه في المستند.

هناك ثلاث خصائص متاحةImageFileNameImageStream وImage لتحديد المكان الذي يجب التقاط الصورة منه. قم بتعيين واحدة فقط من هذه الخصائص.

لإدراج حقل دمج بريد صورة في مستند في Word، حدد أمر إدراج/حقل، ثم حدد MergeField واكتب Image:MyFieldName.

أمثلة

يوضح كيفية إدراج الصور المخزنة في حقل BLOB بقاعدة البيانات في تقرير.

public void ImageFromBlob()
{
    Document doc = new Document(MyDir + "Mail merge destination - Northwind employees.docx");

    doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob();

    string connString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={DatabaseDir + "Northwind.accdb"};";
    string query = "SELECT FirstName, LastName, Title, Address, City, Region, Country, PhotoBLOB FROM Employees";

    using (OleDbConnection conn = new OleDbConnection(connString))
    {
        conn.Open();

        // افتح قارئ البيانات، والذي يجب أن يكون في وضع يقرأ جميع السجلات مرة واحدة.
        OleDbCommand cmd = new OleDbCommand(query, conn);
        IDataReader dataReader = cmd.ExecuteReader();

        doc.MailMerge.ExecuteWithRegions(dataReader, "Employees");
    }

    doc.Save(ArtifactsDir + "MailMergeEvent.ImageFromBlob.docx");
}

private class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
    void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
    {
        // لا تفعل شيئا.
    }

    /// <summary>
    /// يتم استدعاء هذا عندما يواجه دمج البريد MERGEFIELD في المستند الذي يحتوي على علامة "صورة:" في اسمه.
    /// </summary>
    void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
    {
        MemoryStream imageStream = new MemoryStream((byte[])e.FieldValue);
        e.ImageStream = imageStream;
    }
}

يوضح كيفية تعيين أبعاد الصور كما يقبلها MERGEFIELDS أثناء دمج البريد.

public void MergeFieldImageDimension()
{
    Document doc = new Document();

    // أدخل MERGEFIELD الذي سيقبل الصور من المصدر أثناء دمج البريد. استخدم رمز الحقل للرجوع إليه
    // عمود في مصدر البيانات يحتوي على أسماء ملفات النظام المحلي للصور التي نرغب في استخدامها في دمج البريد.
    DocumentBuilder builder = new DocumentBuilder(doc);
    FieldMergeField field = (FieldMergeField)builder.InsertField("MERGEFIELD Image:ImageColumn");

    // يجب أن يحتوي مصدر البيانات على عمود يسمى "ImageColumn".
    Assert.AreEqual("Image:ImageColumn", field.FieldName);

    // قم بإنشاء مصدر بيانات مناسب.
    DataTable dataTable = new DataTable("Images");
    dataTable.Columns.Add(new DataColumn("ImageColumn"));
    dataTable.Rows.Add(ImageDir + "Logo.jpg");
    dataTable.Rows.Add(ImageDir + "Transparent background logo.png");
    dataTable.Rows.Add(ImageDir + "Enhanced Windows MetaFile.emf");

    // قم بتكوين رد اتصال لتعديل أحجام الصور في وقت الدمج، ثم قم بتنفيذ عملية دمج البريد.
    doc.MailMerge.FieldMergingCallback = new MergedImageResizer(200, 200, MergeFieldImageDimensionUnit.Point);
    doc.MailMerge.Execute(dataTable);

    doc.UpdateFields();
    doc.Save(ArtifactsDir + "Field.MERGEFIELD.ImageDimension.docx");
}

/// <summary>
/// يضبط حجم جميع الصور المدمجة بالبريد على عرض وارتفاع محددين.
/// </summary>
private class MergedImageResizer : IFieldMergingCallback
{
    public MergedImageResizer(double imageWidth, double imageHeight, MergeFieldImageDimensionUnit unit)
    {
        mImageWidth = imageWidth;
        mImageHeight = imageHeight;
        mUnit = unit;
    }

    public void FieldMerging(FieldMergingArgs e)
    {
        throw new NotImplementedException();
    }

    public void ImageFieldMerging(ImageFieldMergingArgs args)
    {
        args.ImageFileName = args.FieldValue.ToString();
        args.ImageWidth = new MergeFieldImageDimension(mImageWidth, mUnit);
        args.ImageHeight = new MergeFieldImageDimension(mImageHeight, mUnit);

        Assert.AreEqual(mImageWidth, args.ImageWidth.Value);
        Assert.AreEqual(mUnit, args.ImageWidth.Unit);
        Assert.AreEqual(mImageHeight, args.ImageHeight.Value);
        Assert.AreEqual(mUnit, args.ImageHeight.Unit);
    }

    private readonly double mImageWidth;
    private readonly double mImageHeight;
    private readonly MergeFieldImageDimensionUnit mUnit;
}

أنظر أيضا