ImageFieldMergingArgs

ImageFieldMergingArgs class

Fornisce i dati per ilImageFieldMerging evento.

Per saperne di più, visita ilStampa unione e reporting articolo di documentazione.

public class ImageFieldMergingArgs : FieldMergingArgsBase

Proprietà

NomeDescrizione
Document { get; }Restituisce ilDocument oggetto per cui viene eseguita la stampa unione.
DocumentFieldName { get; }Ottiene il nome del campo di unione come specificato nel documento.
Field { get; }Ottiene l’oggetto che rappresenta il campo di unione corrente.
FieldName { get; }Ottiene il nome del campo di unione nell’origine dati.
FieldValue { get; set; }Ottiene o imposta il valore del campo dall’origine dati.
Image { get; set; }Specifica l’immagine che il motore di stampa unione deve inserire nel documento.
ImageFileName { get; set; }Imposta il nome del file dell’immagine che il motore di stampa unione deve inserire nel documento.
ImageHeight { get; set; }Specifica l’altezza dell’immagine da inserire nel documento.
ImageStream { get; set; }Specifica il flusso da cui il motore di stampa unione legge un’immagine.
ImageWidth { get; set; }Specifica la larghezza dell’immagine da inserire nel documento.
RecordIndex { get; }Ottiene l’indice in base zero del record da unire.
Shape { get; set; }Specifica la forma che il motore di stampa unione deve inserire nel documento.
TableName { get; }Ottiene il nome della tabella dati per l’operazione di unione corrente o una stringa vuota se il nome non è disponibile.

Osservazioni

Questo evento si verifica durante la stampa unione quando nel documento viene rilevato un campo immagine mail merge . Puoi rispondere a questo evento per restituire un nome file, uno stream o un file Image oggetto al motore mail merge in modo che venga inserito nel documento.

Ci sono tre immobili disponibiliImageFileName , ImageStream EImage per specificare da dove deve essere presa l’immagine. Imposta solo una di queste proprietà.

Per inserire un campo di stampa unione immagine in un documento in Word, seleziona il comando Inserisci/Campo, quindi seleziona UnisciCampo e digita Immagine:IlMioNomeCampo.

Esempi

Mostra come inserire in un report le immagini archiviate in un campo BLOB del database.

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

        // Apre il lettore dati, che deve essere in una modalità che legga tutti i record contemporaneamente.
        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)
    {
        // Fare niente.
    }

    /// <summary>
    /// Viene chiamato quando una stampa unione incontra un MERGEFIELD nel documento con un tag "Immagine:" nel suo nome.
    /// </summary>
    void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
    {
        MemoryStream imageStream = new MemoryStream((byte[])e.FieldValue);
        e.ImageStream = imageStream;
    }
}

Mostra come impostare le dimensioni delle immagini poiché MERGEFIELDS le accetta durante una stampa unione.

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

    // Inserisci un MERGEFIELD che accetterà le immagini da una fonte durante una stampa unione. Utilizzare il codice di campo come riferimento
    // una colonna nell'origine dati contenente i nomi dei file di sistema locale delle immagini che desideriamo utilizzare nella stampa unione.
    DocumentBuilder builder = new DocumentBuilder(doc);
    FieldMergeField field = (FieldMergeField)builder.InsertField("MERGEFIELD Image:ImageColumn");

    // L'origine dati dovrebbe avere una colonna denominata "ImageColumn".
    Assert.AreEqual("Image:ImageColumn", field.FieldName);

    // Crea un'origine dati adatta.
    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");

    // Configura una richiamata per modificare le dimensioni delle immagini al momento dell'unione, quindi esegue la stampa unione.
    doc.MailMerge.FieldMergingCallback = new MergedImageResizer(200, 200, MergeFieldImageDimensionUnit.Point);
    doc.MailMerge.Execute(dataTable);

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

/// <summary>
/// Imposta la dimensione di tutte le immagini unite tramite posta su una larghezza e un'altezza definite.
/// </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;
}

Guarda anche