/// <summary> /// Выполняет поиск стандартных элементов в документе по значению <paramref name="name"/>. /// Генерирует изображение в формате png, представляющее штрих код соответствующий страндарту Code128, /// на основе значения <c><paramref name="value"/>.ToString()</c>. /// Извлекает из наденых элементов дочерний элемент, представляющий контейнер изображения /// и заполняет сгенерированным изображением. /// </summary> /// <param name="name">Имя целевого(ых) стандартных элементов.</param> /// <param name="value"> /// Ссылка на объект, строковое представление которого необходимо необходимо закодировать. /// </param> /// <exception cref="InvalidSdtElementException"> /// Возникает если дерево дочерних элементов <see cref="SdtElement"/> содержит недопустимые элементы /// или отсутствует обязательный дочерний элемент. /// </exception> protected void FillBarcode(string name, object value) { name.ThrowIfNullOrWhiteSpace(nameof(name)); value.ThrowIfNull(nameof(value)); try { var imageStream = new MemoryStream(); var relationshipId = new StringValue(string.Empty); using (var barcodeImage = new Code128().Barcode(value.ToString(), false, BarWeight.Double, 40, true)) { barcodeImage.Save(imageStream, ImageFormat.Png); imageStream.Position = 0; } foreach (var element in _elemetns.Where(element => element.SdtProperties.GetFirstChild <SdtAlias>()?.Val == name)) { relationshipId = element.Descendants <Blip>().Single().Embed; FeedDataIfExistImagePart(_mainDocumentPart, relationshipId, imageStream); foreach (var footerPart in _mainDocumentPart.FooterParts) { FeedDataIfExistImagePart(footerPart, relationshipId, imageStream); } foreach (var headerPart in _mainDocumentPart.HeaderParts) { FeedDataIfExistImagePart(headerPart, relationshipId, imageStream); } } } catch (InvalidOperationException) { throw new InvalidSdtElementException(name); } }