private void SetStringValue(FieldToMerge field, object value) { if (value == null || string.IsNullOrEmpty(value.ToString())) { field.Element.Remove(); return; } var first = field.Element.Descendants <Text>().First(); var run = first.Parent; run.Descendants <Text>() .Skip(1) .ToList() .ForEach(e => e.Remove()); var lines = value.ToString().Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < lines.Length; i++) { if (i == 0) { var textElement = run.Descendants <Text>().First(); var newElement = textElement.CloneNode(true); ((Text)newElement).Text = lines[0]; textElement.InsertAfterSelf(newElement); textElement.Remove(); } else { run.AppendChild(new Text(lines[i])); } if (i != lines.Length - 1) { run.AppendChild(new Break()); } } }
private void SetImageValue(FieldToMerge field, object value) { if (value == null) { return; } var blipElement = field.Element.Descendants <Blip>().First(); var sdtImage = field.Element.Descendants <Drawing>().First(); if (blipElement != null) { var imageId = blipElement.Embed.Value; // Resize image to fit in container var imageData = ResizeImage((byte[])value, sdtImage.Inline.Extent.Cx, sdtImage.Inline.Extent.Cy); // Reset content size to match image so the image is not distorted. sdtImage.Descendants <Picture>().First() .ShapeProperties.Transform2D.Extents.Cx = imageData.WidthInEmu; sdtImage.Descendants <Picture>().First() .ShapeProperties.Transform2D.Extents.Cy = imageData.HeightInEmu; sdtImage.Inline.Extent.Cx = imageData.WidthInEmu; sdtImage.Inline.Extent.Cy = imageData.HeightInEmu; // Get the ImagePart if (field.DocumentPart.GetPartById(imageId) is ImagePart imagePart) { using (var binaryWriter = new BinaryWriter(imagePart.GetStream())) { binaryWriter.Write(imageData.Data); } } } }
private void SetHyperlinkValue(FieldToMerge field, object value) { if (value == null || string.IsNullOrEmpty(value.ToString())) { field.Element.Remove(); return; } var hLink = field.Element.Descendants <Hyperlink>().First(); if (hLink != null) { var relationId = hLink.Id; var hr = field.DocumentPart.HyperlinkRelationships.FirstOrDefault(a => a.Id == relationId); if (hr != null) { field.DocumentPart.DeleteReferenceRelationship(hr); field.DocumentPart.AddHyperlinkRelationship(new Uri(value.ToString(), UriKind.Absolute), true, relationId); } } }