/// <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); }
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); } } }
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; }
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(); }
// --------------------------------------------------------------------------- /** * 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()); } }
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) { }