gpt4 book ai didi

c# - Aspose.Words - 邮件合并图像

转载 作者:行者123 更新时间:2023-12-02 01:16:22 27 4
gpt4 key购买 nike

我正在尝试遍历数据集,使用Aspose.Words 邮件合并功能为每个项目创建一个页面。下面的代码循环遍历 Dataset - 并将一些值传递给 Mail-Merge Execute 函数。

var blankDocument = new Document();
var pageDocument = new Document(sFilename);
...
foreach (DataRow row in ds.Tables[0].Rows){
var sBarCode = row["BarCode"].ToString();
var imageFilePath = HttpContext.Current.Server.MapPath("\\_temp\\") + sBarCode + ".png";

var tempDoc = (Document)pageDocument.Clone(true);

var fieldNames = new string[] { "Test", "Barcode" };
var fieldData = new object[] { imageFilePath, imageFilePath };

tempDoc.MailMerge.Execute(fieldNames, fieldData);

blankDocument.AppendDocument(tempDoc, ImportFormatMode.KeepSourceFormatting);
}
var stream = new MemoryStream();
blankDocument.Save(stream, SaveFormat.Docx);
// I then output this stream using headers,
// to cause the browser to download the document.

邮件合并项 { MERGEFIELD Test }Dataset 中获取正确的数据。然而,实际图像在所有页面上显示第 1 页的图像:

{ INCLUDEPICTURE "{MERGEFIELD Barcode }" \* MERGEFORMAT \d }

假设这是我的“条形码”字段数据:

c:\img1.png
c:\img2.png
c:\img3.png

此文档的第一页,在“测试”字段的文本中显示 c:\img1.png。显示的图像是 img1.png

但是第 2 页将 c:\img2.png 显示为文本,但将 img1.png 显示为实际图像。

有没有人对此有任何见解?

编辑:这似乎更像是一个 Word 问题。当我在 Word 中的 Alt+F9 模式之间切换时,图像实际上显示 c:\img1.png 作为来源。这就是为什么它显示在每个页面上的原因。

我将其简化为:

{ INCLUDEPICTURE "{MERGEFIELD Barcode }" \d }

此外,在 Word 的邮件收件人列表中为该字段添加了测试数据。当我预览时,它不会拉入数据,改变图像。所以,这是根本问题。

最佳答案

我知道这是个老问题。但我还是想回答一下。

使用Aspose.Words 可以很容易地在执行邮件合并时插入图像。为此,您应该简单地使用具有特殊名称的 mergefield,例如 Image:MyImageFieldName。 https://docs.aspose.com/words/net/insert-checkboxes-html-or-images-during-mail-merge/#how-to-insert-images-from-a-database

此外,不需要遍历数据集中的行并为每一行执行邮件合并。只需将整个数据传递给 MailMerge.Execute 方法,Aspose.Words 就会为数据中的每条记录复制模板。这是此类模板的一个简单示例 Template screenshot

使用以下代码执行邮件合并后:

// Create dummy data.
DataTable dt = new DataTable();
dt.Columns.Add("FirstName");
dt.Columns.Add("LastName");
dt.Columns.Add("MyImage");
dt.Rows.Add("John", "Smith", @"C:\Temp\1.png");
dt.Rows.Add("Jane", "Smith", @"C:\Temp\2.png");

// Open template, execute mail merge and save the result.
Document doc = new Document(@"C:\Temp\in.docx");
doc.MailMerge.Execute(dt);
doc.Save(@"C:\Temp\out.docx");

结果如下所示: Result screenshot

披露:我在 Aspose.Words 团队工作。

关于c# - Aspose.Words - 邮件合并图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com