// ===========================================================================
        public override void Write(Stream stream)
        {
            // step 1
            using (Document document = new Document()) {
                // step 2
                PdfWriter writer = PdfWriter.GetInstance(document, stream);
                // step 3
                document.Open();
                // step 4
                PdfContentByte canvas = writer.DirectContent;
                PdfShading     axial  = PdfShading.SimpleAxial(writer, 36, 716, 396,
                                                               788, BaseColor.ORANGE, BaseColor.BLUE
                                                               );
                canvas.PaintShading(axial);
                document.NewPage();
                PdfShading radial = PdfShading.SimpleRadial(writer,
                                                            200, 700, 50, 300, 700, 100,
                                                            new BaseColor(0xFF, 0xF7, 0x94),
                                                            new BaseColor(0xF7, 0x8A, 0x6B),
                                                            false, false
                                                            );
                canvas.PaintShading(radial);

                PdfShadingPattern shading = new PdfShadingPattern(axial);
                ColorRectangle(canvas, new ShadingColor(shading), 150, 420, 126, 126);
                canvas.SetShadingFill(shading);
                canvas.Rectangle(300, 420, 126, 126);
                canvas.FillStroke();
            }
        }
        public void Verify_ShadingPatternColor_CanBeCreated()
        {
            var pdfFilePath = TestUtils.GetOutputFileName();
            var stream      = new FileStream(pdfFilePath, FileMode.Create);

            // step 1
            var document = new Document();

            // step 2
            PdfWriter writer = PdfWriter.GetInstance(document, stream);

            // step 3
            document.AddAuthor(TestUtils.Author);
            document.Open();
            // step 4
            PdfContentByte canvas = writer.DirectContent;
            PdfShading     axial  = PdfShading.SimpleAxial(writer, 36, 716, 396,
                                                           788, BaseColor.Orange, BaseColor.Blue
                                                           );

            canvas.PaintShading(axial);
            document.NewPage();
            PdfShading radial = PdfShading.SimpleRadial(writer,
                                                        200, 700, 50, 300, 700, 100,
                                                        new BaseColor(0xFF, 0xF7, 0x94),
                                                        new BaseColor(0xF7, 0x8A, 0x6B),
                                                        false, false
                                                        );

            canvas.PaintShading(radial);

            PdfShadingPattern shading = new PdfShadingPattern(axial);

            colorRectangle(canvas, new ShadingColor(shading), 150, 420, 126, 126);
            canvas.SetShadingFill(shading);
            canvas.Rectangle(300, 420, 126, 126);
            canvas.FillStroke();

            document.Close();
            stream.Dispose();

            TestUtils.VerifyPdfFileIsReadable(pdfFilePath);
        }
示例#3
0
    public void CellLayout(PdfPCell cell, iTextSharp.text.Rectangle position, PdfContentByte[] canvases)
    {
      if (Helper.IsTransparent(_backgroundBrush))
        position.BackgroundColor = null;

      var gradientBrush = _backgroundBrush as GradientBrush;
      if (gradientBrush != null)
      {
        PdfShading shading = null;

        var fromColor = PdfPrinter.GetBaseColor(gradientBrush.GradientStops.FirstOrDefault().Color);
        var toColor = PdfPrinter.GetBaseColor(gradientBrush.GradientStops.LastOrDefault().Color);

        var linearGradientBrush = _backgroundBrush as LinearGradientBrush;
        if (linearGradientBrush != null)
        {
          float x0, y0, x1, y1;
          var brushSlopeAbs = Math.Abs(linearGradientBrush.EndPoint.Y - linearGradientBrush.StartPoint.Y) / Math.Abs(linearGradientBrush.EndPoint.X - linearGradientBrush.StartPoint.X);
          var cellSlopeAbs = position.Height / position.Width;
          if (linearGradientBrush.EndPoint.X > linearGradientBrush.StartPoint.X) // from left to right
          {
            x0 = position.Left;
            if (linearGradientBrush.EndPoint.Y > linearGradientBrush.StartPoint.Y) // from top to bottom
            {
              y0 = position.Top;
              if (cellSlopeAbs >= brushSlopeAbs)
              {
                x1 = position.Left + (float)(position.Height / brushSlopeAbs);
                y1 = position.Bottom;
              }
              else
              {
                x1 = position.Right;
                y1 = position.Top - (float)(position.Width * brushSlopeAbs);
              }
            }
            else // from bottom to top
            {
              y0 = position.Bottom;
              if (cellSlopeAbs >= brushSlopeAbs)
              {
                x1 = position.Left + (float)(position.Height / brushSlopeAbs);
                y1 = position.Top;
              }
              else
              {
                x1 = position.Right;
                y1 = position.Bottom + (float)(position.Width * brushSlopeAbs);
              }
            }
          }
          else // from right to left
          {
            x0 = position.Right;
            if (linearGradientBrush.EndPoint.Y > linearGradientBrush.StartPoint.Y) // from top to bottom
            {
              y0 = position.Top;
              if (cellSlopeAbs >= brushSlopeAbs)
              {
                x1 = position.Right - (float)(position.Height / brushSlopeAbs);
                y1 = position.Bottom;
              }
              else
              {
                x1 = position.Right;
                y1 = position.Top - (float)(position.Width * brushSlopeAbs);
              }
            }
            else // from bottom to top
            {
              y0 = position.Bottom;
              if (cellSlopeAbs >= brushSlopeAbs)
              {
                x1 = position.Right - (float)(position.Height / brushSlopeAbs);
                y1 = position.Top;
              }
              else
              {
                x1 = position.Right;
                y1 = position.Bottom + (float)(position.Width * brushSlopeAbs);
              }
            }
          }

          shading = PdfShading.SimpleAxial(_writer, x0, y0, x1, y1, fromColor, toColor, false, false);
        }

        var radialGradientBrush = _backgroundBrush as RadialGradientBrush;
        if (radialGradientBrush != null)
        {
          float xCenter = 0, yCenter = 0, radius = 0;
          shading = PdfShading.SimpleRadial(_writer, xCenter, yCenter, 0, xCenter, yCenter, radius, fromColor, toColor, true, true);
        }

        if (shading != null)
          position.BackgroundColor = new ShadingColor(new PdfShadingPattern(shading));
      }

      //Fill the rectangle
      canvases[PdfPTable.BACKGROUNDCANVAS].Rectangle(position);
    }