Я пытаюсь пройти через Dataset
, создав страницу для каждого элемента, используя функцию слияния почты 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. Когда я переключаюсь между режимами Alt + F9 внутри Word, изображение фактически отображает c:\img1.png
в качестве источника. Вот почему он отображается на каждой странице.
Я упростил это до:
{ INCLUDEPICTURE "{MERGEFIELD Barcode }" \d }
Также добавлены тестовые данные для этого поля в список получателей рассылки Word. Когда я просматриваю, он не втягивает данные, меняя изображение. Итак, это основная проблема.