ImageFieldMergingArgs

ImageFieldMergingArgs class

Fournit des données pour leImageFieldMerging événement.

Pour en savoir plus, visitez leFusion et publipostage et création de rapports article documentaire.

public class ImageFieldMergingArgs : FieldMergingArgsBase

Propriétés

NomLa description
Document { get; }Renvoie leDocument objet pour lequel le publipostage est effectué.
DocumentFieldName { get; }Obtient le nom du champ de fusion tel que spécifié dans le document.
Field { get; }Obtient l’objet qui représente le champ de fusion actuel.
FieldName { get; }Obtient le nom du champ de fusion dans la source de données.
FieldValue { get; set; }Obtient ou définit la valeur du champ à partir de la source de données.
Image { get; set; }Spécifie l’image que le moteur de publipostage doit insérer dans le document.
ImageFileName { get; set; }Définit le nom de fichier de l’image que le moteur de publipostage doit insérer dans le document.
ImageHeight { get; set; }Spécifie la hauteur de l’image à insérer dans le document.
ImageStream { get; set; }Spécifie le flux à partir duquel le moteur de publipostage doit lire une image.
ImageWidth { get; set; }Spécifie la largeur de l’image à insérer dans le document.
RecordIndex { get; }Obtient l’index de base zéro de l’enregistrement en cours de fusion.
Shape { get; set; }Spécifie la forme que le moteur de publipostage doit insérer dans le document.
TableName { get; }Obtient le nom de la table de données pour l’opération de fusion en cours ou une chaîne vide si le nom n’est pas disponible.

Remarques

Cet événement se produit lors d’un publipostage lorsqu’un champ image mail merge est rencontré dans le document. Vous pouvez répondre à cet événement pour renvoyer un nom de fichier a , un flux ou unImage objet au moteur mail merge afin qu’il soit inséré dans le document.

Il y a trois propriétés disponiblesImageFileName , ImageStream etImage pour spécifier d’où l’image doit être prise. Définissez une seule de ces propriétés.

Pour insérer un champ de fusion et publipostage image dans un document dans Word, sélectionnez Commande Insérer/Champ, puis sélectionnez MergeField et tapez Image:MyFieldName.

Exemples

Montre comment insérer des images stockées dans un champ BLOB de base de données dans un rapport.

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();

        // Ouvrez le lecteur de données, qui doit être dans un mode permettant de lire tous les enregistrements en même temps.
        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)
    {
        // Ne fais rien.
    }

    /// <summary>
    /// Ceci est appelé lorsqu'un publipostage rencontre un MERGEFIELD dans le document avec une balise "Image:" dans son nom.
    /// </summary>
    void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
    {
        MemoryStream imageStream = new MemoryStream((byte[])e.FieldValue);
        e.ImageStream = imageStream;
    }
}

Montre comment définir les dimensions des images telles que MERGEFIELDS les accepte lors d’un publipostage.

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

    // Insère un MERGEFIELD qui acceptera les images d'une source lors d'un publipostage. Utilisez le code de champ pour référencer
    // une colonne dans la source de données contenant les noms de fichiers du système local des images que nous souhaitons utiliser dans le publipostage.
    DocumentBuilder builder = new DocumentBuilder(doc);
    FieldMergeField field = (FieldMergeField)builder.InsertField("MERGEFIELD Image:ImageColumn");

    // La source de données doit avoir une telle colonne nommée "ImageColumn".
    Assert.AreEqual("Image:ImageColumn", field.FieldName);

    // Créez une source de données appropriée.
    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");

    // Configurez un rappel pour modifier les tailles des images au moment de la fusion, puis exécutez le publipostage.
    doc.MailMerge.FieldMergingCallback = new MergedImageResizer(200, 200, MergeFieldImageDimensionUnit.Point);
    doc.MailMerge.Execute(dataTable);

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

/// <summary>
/// Définit la taille de toutes les images fusionnées par courrier sur une largeur et une hauteur définies.
/// </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;
}

Voir également