/// <summary>
        /// Creates a PdfPattern object.
        /// @since   2.1.3
        /// </summary>
        /// <param name="painter">a pattern painter instance</param>
        /// <param name="compressionLevel">the compressionLevel for the stream</param>
        internal PdfPattern(PdfPatternPainter painter, int compressionLevel)
        {
            var one    = new PdfNumber(1);
            var matrix = painter.Matrix;

            if (matrix != null)
            {
                Put(PdfName.Matrix, matrix);
            }
            Put(PdfName.TYPE, PdfName.Pattern);
            Put(PdfName.Bbox, new PdfRectangle(painter.BoundingBox));
            Put(PdfName.Resources, painter.Resources);
            Put(PdfName.Tilingtype, one);
            Put(PdfName.Patterntype, one);
            if (painter.IsStencil())
            {
                Put(PdfName.Painttype, new PdfNumber(2));
            }
            else
            {
                Put(PdfName.Painttype, one);
            }

            Put(PdfName.Xstep, new PdfNumber(painter.XStep));
            Put(PdfName.Ystep, new PdfNumber(painter.YStep));
            Bytes = painter.ToPdf(null);
            Put(PdfName.LENGTH, new PdfNumber(Bytes.Length));
            FlateCompress(compressionLevel);
        }
Exemple #2
0
 private void setPaint(Paint paint, boolean invert, double xoffset, double yoffset)
 {
     this.paint = paint;
     if (paint is Color)
     {
         cb.setColorFill((Color)paint);
     }
     else if (paint is GradientPaint)
     {
         GradientPaint gp = (GradientPaint)paint;
         Point2D       p1 = gp.getPoint1();
         transform.transform(p1, p1);
         Point2D p2 = gp.getPoint2();
         transform.transform(p2, p2);
         Color             c1      = gp.getColor1();
         Color             c2      = gp.getColor2();
         PdfShading        shading = PdfShading.simpleAxial(cb.getPdfWriter(), (float)p1.getX(), (float)p1.getY(), (float)p2.getX(), (float)p2.getY(), c1, c2);
         PdfShadingPattern pat     = new PdfShadingPattern(shading);
         cb.setShadingFill(pat);
     }
     else
     {
         try {
             BufferedImage img  = null;
             int           type = BufferedImage.TYPE_4BYTE_ABGR;
             if (paint.getTransparency() == Transparency.OPAQUE)
             {
                 type = BufferedImage.TYPE_3BYTE_BGR;
             }
             img = new BufferedImage((int)width, (int)height, type);
             Graphics2D g        = (Graphics2D)img.getGraphics();
             Shape      fillRect = new Rectangle2D.Double(0, 0, img.getWidth(),
                                                          img.getHeight());
             g.setPaint(paint);
             g.fill(fillRect);
             if (invert)
             {
                 AffineTransform tx = new AffineTransform();
                 tx.scale(1, -1);
                 tx.translate(-xoffset, -yoffset);
                 g.drawImage(img, tx, null);
             }
             com.lowagie.text.Image image   = com.lowagie.text.Image.getInstance(img, null);
             PdfPatternPainter      pattern = cb.createPattern(width, height);
             image.setAbsolutePosition(0, 0);
             pattern.addImage(image);
             cb.setPatternFill(pattern);
         } catch (Exception ex) {
             cb.setColorFill(Color.gray);
         }
     }
 }
Exemple #3
0
        public void CellLayout(PdfPCell cell, Rectangle position,
                               PdfContentByte[] canvases)
        {
            PdfContentByte    cb             = canvases[PdfPTable.BACKGROUNDCANVAS];
            PdfPatternPainter patternPainter = cb.CreatePattern(image.ScaledWidth, image.ScaledHeight);

            image.SetAbsolutePosition(0, 0);
            patternPainter.AddImage(image);
            cb.SaveState();
            cb.SetPatternFill(patternPainter);
            cb.Rectangle(position.Left, position.Bottom, position.Width, position.Height);
            cb.Fill();
            cb.RestoreState();
        }
 /// <summary>
 /// Creates a color representing a pattern.
 /// </summary>
 /// <param name="painter">the actual pattern</param>
 public PatternColor(PdfPatternPainter painter) : base(TYPE_PATTERN, .5f, .5f, .5f)
 {
     _painter = painter;
 }
Exemple #5
0
        public Chap1014()
        {
            Console.WriteLine("Chapter 10 Example 14: colored patterns");

            // step 1: creation of a document-object
            Document document = new Document(PageSize.A4, 50, 50, 50, 50);

            Document.Compress = false;
            try
            {
                // step 2:
                // we create a writer that listens to the document
                // and directs a PDF-stream to a file
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("Chap1014.pdf", FileMode.Create));

                // step 3: we open the document
                document.Open();

                // step 4: we add some content
                PdfContentByte    cb  = writer.DirectContent;
                PdfTemplate       tp  = cb.CreateTemplate(400, 300);
                PdfPatternPainter pat = cb.CreatePattern(15, 15, null);
                pat.Rectangle(5, 5, 5, 5);
                pat.Fill();
                PdfSpotColor spc_cmyk = new PdfSpotColor("PANTONE 280 CV", 0.25f, new CMYKColor(0.9f, .2f, .3f, .1f));
                SpotColor    spot     = new SpotColor(spc_cmyk);
                tp.SetPatternFill(pat, spot, .9f);
                tp.Rectangle(0, 0, 400, 300);
                tp.Fill();
                cb.AddTemplate(tp, 50, 50);
                PdfPatternPainter pat2 = cb.CreatePattern(10, 10, null);
                pat2.SetLineWidth(2);
                pat2.MoveTo(-5, 0);
                pat2.LineTo(10, 15);
                pat2.Stroke();
                pat2.MoveTo(0, -5);
                pat2.LineTo(15, 10);
                pat2.Stroke();
                cb.SetLineWidth(1);
                cb.SetColorStroke(new Color(System.Drawing.Color.Black));
                cb.SetPatternFill(pat2, new Color(System.Drawing.Color.Red));
                cb.Rectangle(100, 400, 30, 210);
                cb.FillStroke();
                cb.SetPatternFill(pat2, new Color(System.Drawing.Color.LightGreen));
                cb.Rectangle(150, 400, 30, 100);
                cb.FillStroke();
                cb.SetPatternFill(pat2, new Color(System.Drawing.Color.Blue));
                cb.Rectangle(200, 400, 30, 130);
                cb.FillStroke();
                cb.SetPatternFill(pat2, new GrayColor(0.5f));
                cb.Rectangle(250, 400, 30, 80);
                cb.FillStroke();
                cb.SetPatternFill(pat2, new GrayColor(0.7f));
                cb.Rectangle(300, 400, 30, 170);
                cb.FillStroke();
                cb.SetPatternFill(pat2, new GrayColor(0.9f));
                cb.Rectangle(350, 400, 30, 40);
                cb.FillStroke();
            }
            catch (Exception de)
            {
                Console.Error.WriteLine(de.Message);
                Console.Error.WriteLine(de.StackTrace);
            }
            // step 5: we close the document
            document.Close();
        }
Exemple #6
0
// ---------------------------------------------------------------------------

        /**
         * Creates a PDF document.
         */
        public byte[] CreatePdf()
        {
            using (MemoryStream ms = new MemoryStream()) {
                // step 1
                using (Document document = new Document()) {
                    // step 2
                    PdfWriter writer = PdfWriter.GetInstance(document, ms);
                    // step 3
                    document.Open();
                    // step 4
                    PdfContentByte    canvas = writer.DirectContent;
                    PdfPatternPainter square
                        = canvas.CreatePattern(15, 15);
                    square.SetColorFill(new BaseColor(0xFF, 0xFF, 0x00));
                    square.SetColorStroke(new BaseColor(0xFF, 0x00, 0x00));
                    square.Rectangle(5, 5, 5, 5);
                    square.FillStroke();

                    PdfPatternPainter ellipse
                        = canvas.CreatePattern(15, 10, 20, 25);
                    ellipse.SetColorFill(new BaseColor(0xFF, 0xFF, 0x00));
                    ellipse.SetColorStroke(new BaseColor(0xFF, 0x00, 0x00));
                    ellipse.Ellipse(2f, 2f, 13f, 8f);
                    ellipse.FillStroke();

                    PdfPatternPainter circle
                        = canvas.CreatePattern(15, 15, 10, 20, BaseColor.BLUE);
                    circle.Circle(7.5f, 7.5f, 2.5f);
                    circle.Fill();

                    PdfPatternPainter line
                        = canvas.CreatePattern(5, 10, null);
                    line.SetLineWidth(1);
                    line.MoveTo(3, -1);
                    line.LineTo(3, 11);
                    line.Stroke();

                    Image img = Image.GetInstance(RESOURCE);
                    img.ScaleAbsolute(20, 20);
                    img.SetAbsolutePosition(0, 0);
                    PdfPatternPainter img_pattern
                        = canvas.CreatePattern(20, 20, 20, 20);
                    img_pattern.AddImage(img);
                    img_pattern.SetPatternMatrix(-0.5f, 0f, 0f, 0.5f, 0f, 0f);

                    ColorRectangle(canvas, new PatternColor(square), 36, 696, 126, 126);
                    ColorRectangle(canvas, new PatternColor(ellipse), 180, 696, 126, 126);
                    ColorRectangle(canvas, new PatternColor(circle), 324, 696, 126, 126);
                    ColorRectangle(canvas, new PatternColor(line), 36, 552, 126, 126);
                    ColorRectangle(canvas, new PatternColor(img_pattern), 36, 408, 126, 126);

                    canvas.SetPatternFill(line, BaseColor.RED);
                    canvas.Ellipse(180, 552, 306, 678);
                    canvas.FillStroke();
                    canvas.SetPatternFill(circle, BaseColor.GREEN);
                    canvas.Ellipse(324, 552, 450, 678);
                    canvas.FillStroke();

                    canvas.SetPatternFill(img_pattern);
                    canvas.Ellipse(180, 408, 450, 534);
                    canvas.FillStroke();
                }
                return(ms.ToArray());
            }
        }
Exemple #7
0
        public Chap1015()
        {
            Console.WriteLine("Chapter 10 Example 15: Tiled Patterns");

            // step 1: creation of a document-object
            Document document = new Document();

            try
            {
                // step 2:
                // we create a writer that listens to the document
                // and directs a PDF-stream to a file
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("Chap1015.pdf", FileMode.Create));

                // step 3: we open the document
                document.Open();

                // step 4: we grab the ContentByte and do some stuff with it
                PdfContentByte cb = writer.DirectContent;

                BaseFont bf = BaseFont.CreateFont("Times-Roman", "winansi", false);

                // step 5: we create some PdfPatternPainter instances for drawing path, text, or placing image

                // Image instance to be placed in PdfPatternPainter canvas. Any nice one?
                Image img = Image.GetInstance("pngnow.png");

                PdfPatternPainter p  = cb.CreatePattern(60f, 60f, 60f, 60f);
                PdfPatternPainter p1 = cb.CreatePattern(60f, 60f, 60f, 60f);
                PdfPatternPainter p2 = cb.CreatePattern(img.ScaledWidth, img.ScaledHeight, img.ScaledWidth, img.ScaledHeight);


                // step 6: put your drawing instruction in the painter canvas

                // A star pattern taken from Adobe PDF Reference Book p.207
                String star = "0.3 g\n15.000 27.000 m\n"
                              + "7.947 5.292 l\n26.413 18.708 l\n"
                              + "3.587 18.708 l\n22.053 5.292 l\nf\n"
                              + "45.000 57.000 m\n37.947 35.292 l\n"
                              + "56.413 48.708 l\n33.587 48.708 l\n"
                              + "52.053 35.292 l\nf\n"
                              + "0.7 g\n15.000 57.000 m\n"
                              + "7.947 35.292 l\n26.413 48.708 l\n"
                              + "3.587 48.708 l\n22.053 35.292 l\nf\n"
                              + "45.000 27.000 m\n37.947 5.292 l\n"
                              + "56.413 18.708 l\n33.587 18.708 l\n"
                              + "52.053 5.292 l\nf";

                p.SetLiteral(star);

                // A Pattern with some text drawing
                p1.SetGrayFill(0.3f);
                p1.SetFontAndSize(bf, 12);
                p1.BeginText();
                p1.SetTextMatrix(1f, 0f, 0f, 1f, 0f, 0f);
                p1.ShowText("A B C D");
                p1.EndText();
                p1.MoveTo(0f, 0f);
                p1.LineTo(60f, 60f);
                p1.Stroke();

                // A pattern with an image and position
                p2.AddImage(img, img.ScaledWidth, 0f, 0f, img.ScaledHeight, 0f, 0f);
                p2.SetPatternMatrix(1f, 0f, 0f, 1f, 60f, 60f);

                // See if we can apply the pattern color to chunk, phrase or paragraph
                PatternColor pat  = new PatternColor(p);
                PatternColor pat1 = new PatternColor(p1);
                PatternColor pat2 = new PatternColor(p2);
                String       text = "Text with pattern";
                document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, new GrayColor(0.3f))));
                document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, pat)));

                // draw a rectangle filled with star pattern
                cb.SetPatternFill(p);
                cb.SetGrayStroke(0.0f);
                cb.Rectangle(20, 20, 284, 120);
                cb.FillStroke();

                // draw some characters filled with star.
                // Note: A gray, rgb, cmyk or spot color should be applied first
                // otherwise, you will not be able to see the character glyph
                // since the glyph path is filled by pattern
                cb.BeginText();
                cb.SetFontAndSize(bf, 1);
                cb.SetTextMatrix(270f, 0f, 0f, 270f, 20f, 100f);
                cb.SetGrayFill(0.9f);
                cb.ShowText("ABC");
                cb.SetPatternFill(p);
                cb.MoveTextWithLeading(0.0f, 0.0f);
                cb.ShowText("ABC");
                cb.EndText();
                cb.SetPatternFill(p);

                // draw a circle. Similar to rectangle
                cb.SetGrayStroke(0.0f);
                cb.Circle(150f, 400f, 150f);
                cb.FillStroke();

                // New Page to draw text in the pattern painter's canvas
                document.NewPage();

                document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, new GrayColor(0.3f))));
                document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, pat1)));
                // draw a rectangle
                cb.SetPatternFill(p1);
                cb.SetGrayStroke(0.0f);
                cb.Rectangle(0, 0, 284, 120);
                cb.FillStroke();

                // draw some characters
                cb.BeginText();
                cb.SetFontAndSize(bf, 1);
                cb.SetTextMatrix(270f, 0f, 0f, 270f, 20f, 100f);
                cb.SetGrayFill(0.9f);
                cb.ShowText("ABC");
                cb.SetPatternFill(p1);
                cb.MoveTextWithLeading(0.0f, 0.0f);
                cb.ShowText("ABC");
                cb.EndText();

                // draw a circle
                cb.SetPatternFill(p1);
                cb.SetGrayStroke(0.0f);
                cb.Circle(150f, 400f, 150f);
                cb.FillStroke();

                // New page to place image in the pattern painter's canvas
                document.NewPage();
                document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, new GrayColor(0.3f))));
                document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, pat2)));
                // The original Image for comparison reason.
                // Note: The width and height is the same as bbox in pattern
                cb.AddImage(img, img.ScaledWidth, 0f, 0f, img.ScaledHeight, 350f, 400f);

                // draw a rectangle
                cb.SetPatternFill(p2);
                cb.SetGrayStroke(0.0f);
                cb.Rectangle(60, 60, 300, 120);
                cb.FillStroke();

                // draw some characters.
                // Note: if the image fills up the pattern, there's no need to draw text twice
                // since colors in image will be clipped to character glyph path
                cb.BeginText();
                cb.SetFontAndSize(bf, 1);
                cb.SetTextMatrix(270f, 0f, 0f, 270f, 60f, 120f);
                cb.SetPatternFill(p2);
                cb.ShowText("ABC");
                cb.EndText();

                // draw a circle
                cb.SetPatternFill(p2);
                cb.SetGrayStroke(0.0f);
                cb.Circle(150f, 400f, 150f);
                cb.FillStroke();
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.Message);
                Console.Error.WriteLine(e.StackTrace);
            }

            // finally, we close the document
            document.Close();
        }
 /// <summary>
 /// Creates a PdfPattern object.
 /// </summary>
 /// <param name="painter">a pattern painter instance</param>
 internal PdfPattern(PdfPatternPainter painter) : this(painter, DEFAULT_COMPRESSION)
 {
 }