Dưới đây, là hình ảnh giao diện demo ứng dụng:
SOURCE CODE:
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:
Theo : LapTrinhVB.Net
4 comments:
MỌI NG ÁP DỤNG CHO CHƯƠNG TRÌNH THỦ THUẬT HAY NÀY NHÉ <3
nice code <3
Code này dùng cho những chuyên làm về slide sẽ hay hơn nhé, và có chút am hiểu về code :D
Hãy đó e
Post a Comment