查看: 3231|回复: 0

[.NET开发] C# 创建邮件合并模板并合并文本、图片

发表于 2018-3-6 08:00:00

对于Word中的邮件合并功能,用户可以将邮件合并后的结果文档保存并打印,也可以通过邮件的形式发送,在很多场合需要使用到此功能。那对于编程人员,我们也可以在C#语言环境中通过代码的形式来实现。根据需要先创建邮件合并模板后,可合并文本和图片,在下面的方法中,需要使用到组件Spire.Doc for .NET 。创建模板前,需先安装该组件,注意添加引用该组件dll文件到控制台应用程序中,同时添加命名空间。

一、创建邮件合并模板

第一步:添加命名空间

  1. using System;
  2. using Spire.Doc;
  3. using Spire.Doc.Documents;
  4. using System.Drawing;
  5. using Spire.Doc.Fields;
复制代码

第二步:主要代码段

  1. //创建一个Document类对象,并添加Section
  2. Document document = new Document();
  3. Section section = document.AddSection();
  4. //添加段落到Section,并向段落添加文字,设置文字颜色、字体粗细
  5. Paragraph paragraph = section.AddParagraph();
  6. TextRange tr = paragraph.AppendText("人 物 基 本 信 息");
  7. tr.CharacterFormat.TextColor = Color.YellowGreen;
  8. tr.CharacterFormat.Bold = true;
  9. //添加文本,并添加合并域“Image:Portrait”
  10. paragraph.AppendText("\n人 物 肖 像 : ");
  11. paragraph.AppendField("Image:Portrait", FieldType.FieldMergeField);
  12. //添加文本,并添加合并域“Name”
  13. paragraph.AppendText("\n姓 名 : ");
  14. paragraph.AppendField("Name", FieldType.FieldMergeField);
  15. //添加文本,并添加合并域“Nation”
  16. paragraph.AppendText("\n民 族 :");
  17. paragraph.AppendField("Nation", FieldType.FieldMergeField);
  18. //添加文本,并添加合并域“Nationality”
  19. paragraph.AppendText("\n国 籍 : ");
  20. paragraph.AppendField("Nationality", FieldType.FieldMergeField);
  21. //添加文本,并添加合并域“Graduated From”
  22. paragraph.AppendText("\n院 校 : ");
  23. paragraph.AppendField("Graduated From", FieldType.FieldMergeField);
  24. //保存并打开文档
  25. document.SaveToFile("模板.docx", FileFormat.Docx2013);
  26. System.Diagnostics.Process.Start("模板.docx");
复制代码

完成以上步骤后,调试运行程序,生成文件(可在项目文件下bin>Debug中查看)
如下图:
C# 创建邮件合并模板并合并文本、图片

二:合并文本、图片

在完成模板创建之后,可添加文本和图片,如下:
第一步:添加命名空间

  1. using System;
  2. using Spire.Doc;
  3. using System.Drawing;
  4. using Spire.Doc.Reporting;
复制代码

第二步:主要代码段

  1. static void Main(string[] args)
  2. {
  3. //实例化一个Document类,并加载文档模板
  4. Document doc = new Document();
  5. doc.LoadFromFile(@"C:\Users\Administrator\Desktop\模板.docx");
  6. var textFieldNames = new string[] { "Name", "Nation", "Nationality", "Graduated From"};
  7. var textFieldValues = new string[] { "乔 治?华 盛 顿 (George Washington)", "美 利 坚 民 族", "美 国", "威 廉 与 玛 丽 学 院 (William and Mary)"};
  8. var imageFieldNames = new string[] { "Portrait" };
  9. var imageFieldValues = new string[] { @"C:\Users\Administrator\Desktop\images\华盛顿.jpg" };
  10. //合并文本到模板
  11. doc.MailMerge.Execute(textFieldNames, textFieldValues);
  12. //创建合并图片自定义事件
  13. doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MailMerge_MergeImageField);
  14. //合并图片到模板
  15. doc.MailMerge.Execute(imageFieldNames, imageFieldValues);
  16. //保存并打开文档
  17. doc.SaveToFile("result.docx", FileFormat.Docx);
  18. System.Diagnostics.Process.Start("result.docx");
  19. }
  20. //添加自定义事件载入图片
  21. static void MailMerge_MergeImageField(object sender, MergeImageFieldEventArgs field)
  22. {
  23. string filePath = field.FieldValue as string;
  24. if (!string.IsNullOrEmpty(filePath))
  25. {
  26. field.Image = Image.FromFile(filePath);
  27. }
  28. }
复制代码

运行程序,生成文件,如下图:

C# 创建邮件合并模板并合并文本、图片

以上全部内容为本文创建邮件合并模板并合并文本和图片的方法讲述,方法中使用到的组件Spire.Doc for .NET在处理Word文档方面具有很好的辅助作用,感兴趣的话可以动手试试。如果本文对你有所帮助,欢迎转载(转载请注明出处)。



回复

使用道具 举报