Ejemplo n.º 1
0
        private IResult SetShadowEffect(XlsxBaseShadow shadow)
        {
            if (shadow.Show == YesNo.No)
            {
                return BooleanResult.SuccessResult;
            }

            var root = XmlWriter.GetXmlNode(XmlChartHelper.ChartSpaceRootNode);
            if (root == null)
            {
                return BooleanResult.SuccessResult;
            }

            try
            {
                var exist = XmlWriter.TryGetElementFrom(root, "c:spPr", out var shapePropertiesNode);
                shapePropertiesNode.AddEffectContainerNode(shadow, XmlWriter);
                if (!exist)
                {
                    root.AppendChild(shapePropertiesNode);
                }

                return BooleanResult.SuccessResult;
            }
            catch (Exception e)
            {
                return BooleanResult.FromException(e);
            }
        }
Ejemplo n.º 2
0
        private IResult SetShadowEffect(XlsxBaseShadow shadow, string pictureName)
        {
            if (shadow.Show == YesNo.No)
            {
                return(BooleanResult.SuccessResult);
            }

            var pictureNode = XmlWriter.GetXmlNode($"xdr:wsDr/xdr:twoCellAnchor/xdr:pic/xdr:nvPicPr/xdr:cNvPr[@name='{pictureName}']");
            var root        = pictureNode?.ParentNode?.ParentNode;

            if (root == null)
            {
                return(BooleanResult.SuccessResult);
            }

            try
            {
                var exist = XmlWriter.TryGetElementFrom(root, "xdr:spPr", out var shapePropertiesNode);
                shapePropertiesNode.AddEffectContainerNode(shadow, XmlWriter);
                if (!exist)
                {
                    root.AppendChild(shapePropertiesNode);
                }

                return(BooleanResult.SuccessResult);
            }
            catch (Exception e)
            {
                return(BooleanResult.FromException(e));
            }
        }
        /// <summary>
        /// Adds a <b>innerShdw</b> node (Inner Shadow) to the node of type <b>effectLst</b> (Effect Container) specified. Not supported in <b>EPPlus</b> library.
        /// </summary>
        /// <param name="effectContainerNode"><b>effectLst</b> node (Effect Container).</param>
        /// <param name="shadow">Shadow from model.</param>
        /// <param name="documentHelper">Target xml document helper.</param>
        /// <remarks>
        /// For more information please see <a href="http://www.schemacentral.com/sc/ooxml/e-a_outerShdw-2.html">http://www.schemacentral.com/sc/ooxml/e-a_outerShdw-2.html</a>
        /// </remarks>
        private static void AddInnerShadowNode(this XmlNode effectContainerNode, XlsxBaseShadow shadow, IXmlHelper documentHelper)
        {
            var blurRadAttr = documentHelper.CreateAttribute("blurRad");

            blurRadAttr.Value = $"{shadow.Blur * OfficeOpenXmlHelper.EMU_PER_POINT}";

            var distAttr = documentHelper.CreateAttribute("dist");

            distAttr.Value = $"{shadow.Offset * OfficeOpenXmlHelper.EMU_PER_POINT}";

            var dirAttr = documentHelper.CreateAttribute("dir");

            dirAttr.Value = $"{shadow.Angle * OfficeOpenXmlHelper.ST_POSITIVE_FIXED_ANGLE}";

            var rotWithShapeAttr = documentHelper.CreateAttribute("rotWithShape");

            rotWithShapeAttr.Value = "0";

            var outerShadowNode = documentHelper.CreateOrDefaultAndAppendElementToNode(effectContainerNode, "a", "innerShdw");

            if (outerShadowNode.Attributes == null)
            {
                return;
            }

            outerShadowNode.Attributes.Append(blurRadAttr);
            outerShadowNode.Attributes.Append(distAttr);
            outerShadowNode.Attributes.Append(dirAttr);
            outerShadowNode.Attributes.Append(rotWithShapeAttr);

            outerShadowNode.AddRgbColorModelPercentageVariantNode(shadow, documentHelper);
        }
        /// <summary>
        /// Adds an <b>effectLst</b> node (Effect Container) to the node of type <b>spPr</b> (Shape properties) specified. Not supported in <b>EPPlus</b> library.
        /// </summary>
        /// <param name="node"><c>spPr</c> node (Shape properties).</param>
        /// <param name="shadow">Shadow from model.</param>
        /// <param name="documentHelper">Target xml document helper.</param>
        /// <remarks>
        /// For more information please see <a href="http://www.schemacentral.com/sc/ooxml/e-a_effectLst-1.html">http://www.schemacentral.com/sc/ooxml/e-a_effectLst-1.html</a>
        /// </remarks>
        /// <exception cref="ArgumentNullException">If <paramref name="node"/> is <b>null</b>.</exception>
        /// <exception cref="ArgumentNullException">If <paramref name="shadow"/> is <b>null</b>.</exception>
        public static void AddEffectContainerNode(this XmlNode node, XlsxBaseShadow shadow, IXmlHelper documentHelper)
        {
            SentinelHelper.ArgumentNull(node, nameof(node));
            SentinelHelper.ArgumentNull(shadow, nameof(shadow));

            var effectContainerNode = documentHelper.CreateOrDefaultAndAppendElementToNode(node, "a", "effectLst");;

            switch (shadow.Type)
            {
            case KnownShadowType.Inner:
                effectContainerNode.AddInnerShadowNode((XlsxInnerShadow)shadow, documentHelper);
                break;

            case KnownShadowType.Outer:
                effectContainerNode.AddOuterShadowNode((XlsxOuterShadow)shadow, documentHelper);
                break;

            case KnownShadowType.Perspective:
                effectContainerNode.AddPerspectiveShadowNode((XlsxPerspectiveShadow)shadow, documentHelper);
                break;
            }
        }
        /// <summary>
        /// Adds a <b>scrgbClr</b> node (Rgb Color Model Percentage Variant) to the nodes of type <b>outerShdw</b> (Outer Shadow), <b>innerShdw</b> (Inner Shadow), specified. Not supported in <b>EPPlus</b> library.
        /// </summary>
        /// <param name="outerShadowNode"><b>outerShdw</b> node (Outer Shadow).</param>
        /// <param name="shadow">Shadow from model.</param>
        /// <param name="documentHelper">Target xml document helper.</param>
        /// <remarks>
        /// For more information please see <a href="http://www.schemacentral.com/sc/ooxml/e-a_scrgbClr-1.html">http://www.schemacentral.com/sc/ooxml/e-a_scrgbClr-1.html</a>
        /// </remarks>
        private static void AddRgbColorModelPercentageVariantNode(this XmlNode outerShadowNode, XlsxBaseShadow shadow, IXmlHelper documentHelper)
        {
            var valueAttr = documentHelper.CreateAttribute("val");

            valueAttr.Value = ColorHelper.ToHex(shadow.GetColor()).Replace("#", string.Empty);

            var rgbColorModelPercentageVariantNode = documentHelper.CreateOrDefaultAndAppendElementToNode(outerShadowNode, "a", "srgbClr");

            rgbColorModelPercentageVariantNode.Attributes?.Append(valueAttr);

            var alphaValueAttr = documentHelper.CreateAttribute("val");

            alphaValueAttr.Value = $"{(100 - shadow.Transparency) * OfficeOpenXmlHelper.ST_PERCENTAGE}";

            var alphaNode = documentHelper.CreateOrDefaultAndAppendElementToNode(rgbColorModelPercentageVariantNode, "a", "alpha");

            alphaNode.Attributes?.Append(alphaValueAttr);
        }