示例#1
0
        public override Color CreateColor(SvgDrawContext context, Rectangle objectBoundingBox, float objectBoundingBoxMargin
                                          , float parentOpacity)
        {
            if (objectBoundingBox == null)
            {
                return(null);
            }
            LinearGradientBuilder builder = new LinearGradientBuilder();

            foreach (GradientColorStop stopColor in ParseStops(parentOpacity))
            {
                builder.AddColorStop(stopColor);
            }
            builder.SetSpreadMethod(ParseSpreadMethod());
            bool isObjectBoundingBox = IsObjectBoundingBoxUnits();

            Point[] coordinates = GetCoordinates(context, isObjectBoundingBox);
            builder.SetGradientVector(coordinates[0].GetX(), coordinates[0].GetY(), coordinates[1].GetX(), coordinates
                                      [1].GetY());
            AffineTransform gradientTransform = GetGradientTransformToUserSpaceOnUse(objectBoundingBox, isObjectBoundingBox
                                                                                     );

            builder.SetCurrentSpaceToGradientVectorSpaceTransformation(gradientTransform);
            return(builder.BuildColor(objectBoundingBox.ApplyMargins(objectBoundingBoxMargin, objectBoundingBoxMargin,
                                                                     objectBoundingBoxMargin, objectBoundingBoxMargin, true), context.GetCurrentCanvasTransform(), context.
                                      GetCurrentCanvas().GetDocument()));
        }
示例#2
0
        public ILinearGradient Construct(LinearGradientBuilder builder)
        {
            var linearGradient = new LinearGradient
            {
                Angle       = builder.Angle,
                IsRepeating = builder.IsRepeating,
                Stops       = new GradientElements <GradientStop>(builder.Stops.Cast <GradientStop>())
            };

            return(linearGradient);
        }
        private void AddLinearGradientDirectCoordinatesApproach(PdfDocument pdfDoc)
        {
            Rectangle targetBoundingBox = new Rectangle(50f, 450f, 300f, 300f);
            AbstractLinearGradientBuilder gradientBuilder = new LinearGradientBuilder()
                                                            .SetGradientVector(targetBoundingBox.GetLeft() + 100f, targetBoundingBox.GetBottom() + 100f,
                                                                               targetBoundingBox.GetRight() - 100f, targetBoundingBox.GetTop() - 100f)
                                                            .SetSpreadMethod(GradientSpreadMethod.REPEAT)

                                                            // For the RELATIVE offset type "0" value means the target vector start and the "1" value means the target vector end
                                                            .AddColorStop(new GradientColorStop(ColorConstants.BLUE.GetColorValue(), 0.5, GradientColorStop.OffsetType.RELATIVE))
                                                            .AddColorStop(new GradientColorStop(ColorConstants.GREEN.GetColorValue(), 1, GradientColorStop.OffsetType.RELATIVE));

            GeneratePdf(pdfDoc, null, gradientBuilder, targetBoundingBox);
        }
        public void Parse(CssReader reader, LinearGradientBuilder builder)
        {
            var color = (Color)ColorConverter.ConvertFromInvariantString(GetColorString(reader));

            if (TryConvertPercentToOffset(reader.ReadNext(), out var offset))
            {
                builder.AddStop(color, offset);
            }
            else
            {
                builder.AddStop(color);
                reader.Rollback();
            }
        }
示例#5
0
        private void CreateColorBasedOnAbsolutelyPositionedLinearGradient(Document doc)
        {
            // The below such linear gradient spans across the whole page and therefore color created from it will be
            // different based at the location of the page
            AbstractLinearGradientBuilder gradientBuilder = new LinearGradientBuilder()
                                                            .SetGradientVector(PageSize.A4.GetLeft(), PageSize.A4.GetBottom(), PageSize.A4.GetRight(), PageSize.A4.GetTop())
                                                            .AddColorStop(new GradientColorStop(ColorConstants.RED.GetColorValue()))
                                                            .AddColorStop(new GradientColorStop(ColorConstants.PINK.GetColorValue()))
                                                            .AddColorStop(new GradientColorStop(ColorConstants.BLUE.GetColorValue()));

            Color gradientColor = gradientBuilder.BuildColor(PageSize.A4.Clone(), null, doc.GetPdfDocument());

            doc.Add(new Paragraph("The \"createColorBasedOnAbsolutelyPositionedLinearGradient\" starts here.").SetFontColor(gradientColor));
            String text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In dapibus aliquam quam. Aliquam at tincidunt mauris. "
                          + "Curabitur mollis leo venenatis diam bibendum consectetur. Etiam at lacus ultricies, vulputate dui nec, mattis ex. "
                          + "Sed quis leo in purus consectetur sodales. Nam sit amet felis orci. Aliquam non lacus ut nisi hendrerit sollicitudin "
                          + "a at ligula. Vivamus condimentum vehicula nulla a blandit. In sit amet ex hendrerit augue iaculis consectetur. "
                          + "Etiam semper risus pulvinar, faucibus ex eu, tristique felis. Integer ullamcorper ipsum ac nisi vulputate malesuada."
                          + "Nunc sit amet ipsum sollicitudin, consequat lectus ac, finibus erat. Vivamus malesuada a leo vel consequat."
                          + "Maecenas ac blandit velit, at eleifend ipsum. Praesent dui orci, molestie a semper eu, varius nec augue. "
                          + "Ut vehicula libero ligula, id tristique nisi convallis et. Curabitur nec velit ut nisi commodo rhoncus "
                          + "non eu ipsum. Pellentesque eget mauris ex. Nullam et lectus et eros sollicitudin tincidunt. Phasellus "
                          + "commodo erat nec diam consectetur elementum. Cras pellentesque commodo est, vel viverra nisi "
                          + "vulputate ac. Curabitur interdum nulla at viverra varius. Donec porttitor erat lacus, ac efficitur "
                          + "arcu malesuada dignissim. Aenean pretium ex tortor, a porttitor quam mollis vitae. Etiam id nibh dolor."
                          + " Curabitur vel ligula tortor. Etiam vestibulum velit neque, a mattis tortor vehicula sed. Sed sit amet "
                          + "ipsum leo. Mauris et tincidunt ex. Donec vehicula, magna eget convallis suscipit, nisi tellus ullamcorper "
                          + "massa, eu commodo lectus massa ac orci. Fusce nec gravida justo, ac lacinia metus. Etiam porttitor "
                          + "massa odio, vestibulum semper ipsum tristique eget. Donec semper elit nibh, tristique placerat arcu "
                          + "egestas et. Pellentesque leo metus, sodales in nisi ut, condimentum dignissim eros. Duis maximus eu "
                          + "mi faucibus mattis. Quisque leo urna, hendrerit eu finibus nec, ullamcorper at nunc.";
            Paragraph paragraph = new Paragraph(text).SetBorder(new SolidBorder(gradientColor, 5));

            Table table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
            Cell  cell  = new Cell().Add(new Paragraph("Lorem ipsum dolor sit amet, consectetur adipiscing elit."));

            table.AddCell(cell);
            cell = new Cell().Add(new Paragraph("Lorem ipsum dolor sit amet, consectetur adipiscing elit."));
            table.AddCell(cell);
            cell = new Cell().Add(new Paragraph("Lorem ipsum dolor sit amet, consectetur adipiscing elit."));
            table.AddCell(cell);
            table.SetBorder(new SolidBorder(gradientColor, 9));

            doc
            .Add(paragraph)
            .Add(table);
        }
示例#6
0
        public void Parse(CssReader reader, LinearGradientBuilder builder)
        {
            var parts = reader.Read().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            var color = parts.Length > 0
                ? (Color)ColorConverter.ConvertFromInvariantString(parts[0])
                : Color.Black;

            if (parts.Length > 1 && TryConvertPercentToOffset(parts[1], out var offset))
            {
                builder.AddStop(color, offset);
            }
            else
            {
                builder.AddStop(color);
            }
        }
示例#7
0
        public void Parse(CssReader reader, LinearGradientBuilder builder)
        {
            var direction = reader.ReadNext().Trim();

            if (TryConvertDegreeToAngle(direction, out var degreeToAngle))
            {
                builder.AddGradient(degreeToAngle);
            }
            else if (TryConvertNamedDirectionToAngle(direction, out var directionToAngle))
            {
                builder.AddGradient(directionToAngle);
            }
            else
            {
                builder.AddGradient(0);
                reader.Rollback();
            }
        }
        public void Parse_ValidColor_SingleStopWithColorAndOffset(string color, Color expectedColor, float expectedOffset)
        {
            // Arrange
            var reader     = new CssReader(color);
            var builder    = new LinearGradientBuilder();
            var definition = new ColorChannelDefinition();

            // Act
            definition.Parse(reader, builder);

            // Assert
            var result = builder.Build();

            using (new AssertionScope())
            {
                var stops = result.SelectMany(x => x.Stops).ToArray();
                stops.Should().HaveCount(1);

                stops[0].Color.Should().Be(expectedColor);
                stops[0].Offset.Should().Be(expectedOffset);
            }
        }
        public LinearGradient[] ParseCss(string css)
        {
            var builder = new LinearGradientBuilder();

            if (string.IsNullOrWhiteSpace(css))
            {
                return(builder.Build());
            }

            var reader = new CssReader(css);

            while (reader.CanRead)
            {
                var token = reader.Read().Trim();

                var definition = _definitions.FirstOrDefault(x => x.IsMatch(token));
                definition?.Parse(reader, builder);

                reader.MoveNext();
            }

            return(builder.Build().Reverse().ToArray());
        }
示例#10
0
        public virtual void BackgroundLinearGradientClipOriginNoRepeatTest()
        {
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(new ByteArrayOutputStream()));

            byte[]           bytes       = new byte[] { 54, 25, 47, 15, 2, 2, 2, 44, 55, 77, 86, 24 };
            PdfCanvas        pdfCanvas   = new _PdfCanvas_589(pdfDocument.AddNewPage());
            DrawContext      drawContext = new DrawContext(pdfDocument, pdfCanvas);
            AbstractRenderer renderer    = new DivRenderer(new Div().SetPadding(20).SetBorder(new DashedBorder(10)));

            renderer.occupiedArea = new LayoutArea(1, new Rectangle(100f, 200f, 300f, 400f));
            Rectangle targetBoundingBox = new Rectangle(50f, 150f, 300f, 300f);
            AbstractLinearGradientBuilder gradientBuilder = new LinearGradientBuilder().SetGradientVector(targetBoundingBox
                                                                                                          .GetLeft() + 100f, targetBoundingBox.GetBottom() + 100f, targetBoundingBox.GetRight() - 100f, targetBoundingBox
                                                                                                          .GetTop() - 100f).SetSpreadMethod(GradientSpreadMethod.PAD).AddColorStop(new GradientColorStop(ColorConstants
                                                                                                                                                                                                         .RED.GetColorValue(), 0d, GradientColorStop.OffsetType.RELATIVE)).AddColorStop(new GradientColorStop(ColorConstants
                                                                                                                                                                                                                                                                                                              .BLUE.GetColorValue(), 1d, GradientColorStop.OffsetType.RELATIVE));
            BackgroundImage backgroundImage = new BackgroundImage.Builder().SetLinearGradientBuilder(gradientBuilder).
                                              SetBackgroundRepeat(new BackgroundRepeat(BackgroundRepeat.BackgroundRepeatValue.NO_REPEAT)).SetBackgroundClip
                                                  (BackgroundBox.CONTENT_BOX).SetBackgroundOrigin(BackgroundBox.BORDER_BOX).Build();

            renderer.SetProperty(Property.BACKGROUND_IMAGE, backgroundImage);
            renderer.DrawBackground(drawContext);
        }