NEWS

[DEVEXPRESS] Hướng dẫn sử dụng MailMerge kèm Hình ảnh trên Winform

[DEVEXPRESS] Hướng dẫn sử dụng MailMerge kèm Hình ảnh trên Winform
Đăng bởi: Thảo Meo - Lượt xem: 3722 08:39:15, 27/04/2023C#   In bài viết

Xin chào các bạn, hôm nay mình hướng dẫn các bạn cách sử dụng Mail Merge có kèm hình ảnh trên Devexpress C#, Winform.

[DEVEXPRESS] How to MailMerge with Image in Winform C#

Dưới đây, là hình ảnh giao diện demo ứng dụng:

mail_merge_thumb

Source code C#:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using DevExpress.Office.Services;
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;
using DevExpress.XtraPrinting;
using DevExpress.XtraPrinting.BarCode;
using System.IO;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using static ListBoxTemplate.Form1;

namespace MailmergeBarcode
{
    public partial class DevexpressMailMerge : Form
    {
        BarCodeStreamProvider provider;
        public Employee _employee;

        public DevexpressMailMerge(Employee employee)
        {
            InitializeComponent();
            this._employee = employee;
        }

        void RegisterBarCodeProvider(RichEditDocumentServer server, List<Employee> data)
        {
            IUriStreamService uriService = (IUriStreamService)server.GetService(typeof(IUriStreamService));
            provider = new BarCodeStreamProvider(data);
            uriService.RegisterProvider(provider);
        }

        private void btnMergeOption_Click(object sender, EventArgs e)
        {
            RichEditDocumentServer server = new RichEditDocumentServer();
            
            string appPath = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\"));
            string filestr = appPath + @"\certificate.docx";
            server.LoadDocument(filestr, DocumentFormat.Doc);
            var listDaa = new List<Employee>();
            listDaa.Add(_employee);
         
            RegisterBarCodeProvider(server, listDaa);
            server.Options.MailMerge.DataSource = listDaa;
            server.Options.MailMerge.ViewMergedData = true;
            server.Document.Fields.Update();
            MailMergeOptions myMergeOptions = server.Document.CreateMailMergeOptions();
            myMergeOptions.FirstRecordIndex = 0;
            myMergeOptions.LastRecordIndex = 2;
            myMergeOptions.MergeMode = MergeMode.NewSection;
            server.Document.MailMerge(myMergeOptions, richEditControl2.Document);
        }

        private void DevexpressMailMerge_Load(object sender, EventArgs e)
        {
            btnMergeOption_Click(null, null);
        }
    }
}



public class BarCodeStreamProvider : IUriStreamProvider
{
    const string prefix = "\\img://";
    List<Employee> _sampleData;
    public BarCodeStreamProvider(List<Employee> sampleData)
    {
        _sampleData = sampleData;
    }
    #region IUriStreamProvider Members
    public Stream GetStream(string uri)
    {
        if (!uri.StartsWith(prefix))
            return null;
        string value = uri.Substring(prefix.Length);
        var isExisted = _sampleData.Any(x => x.url == value);
        
        if (!isExisted) {
            return null;
        }
        
         
        return ResizeImageFromLocalUri(Application.StartupPath + "\\" + value);
        

    }

    public MemoryStream ResizeImageFromLocalUri(string uri)
    {
       
        Image originalImage = Image.FromFile(uri);    
        int newWidth = 80;
        int newHeight = (int)((float)originalImage.Height / originalImage.Width * newWidth);     
        Bitmap resizedImage = new Bitmap(newWidth, newHeight);
    
        using (Graphics g = Graphics.FromImage(resizedImage))
        {
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.DrawImage(originalImage, 0, 0, newWidth, newHeight);
        }
        MemoryStream memoryStream = new MemoryStream();
        resizedImage.Save(memoryStream, ImageFormat.Jpeg);
        
        originalImage.Dispose();
        resizedImage.Dispose();    
        memoryStream.Position = 0;
       
        return memoryStream;
    }
    #endregion
}

Ở file word template khi các bạn muốn merge hình ảnh vào, chúng ta sử dụng: "INCLUDE PICTURE"

Chi tiết mình có hướng dẫn ở Video dưới đây:

Thanks for watching!

DOWNLOAD SOURCE

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[DEVEXPRESS] Hướng dẫn sử dụng MailMerge kèm Hình ảnh trên Winform
Đăng bởi: Thảo Meo - Lượt xem: 3722 08:39:15, 27/04/2023C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.