Beispiel #1
0
        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());
                }
            }
        }
Beispiel #2
0
        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);
                    }
                }
            }
        }
Beispiel #3
0
        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);
                }
            }
        }