//// This code is part of Document Solutions for PDF .NET demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem.IO;usingSystem.Drawing;usingGrapeCity.Documents.Pdf;usingGrapeCity.Documents.Text;usingGrapeCity.Documents.Drawing;usingGCTEXT = GrapeCity.Documents.Text;usingGCDRAW = GrapeCity.Documents.Drawing; namespaceDsPdfWeb.Demos.Basics{// This sample shows how to insert arbitrary objects (images in this sample)// into a block of text so that those objects keep their positions relative// to the surrounding text, and are laid out exactly like other text runs,// and can participate in text flow.publicclassInlineImages {publicintCreatePDF(Stream stream) {// Get the images to use as inline objects:using (var imgPuffins = GCDRAW.Image.FromFile("Resources/ImagesBis/puffins-small.jpg"))using (var imgFerns = GCDRAW.Image.FromFile("Resources/ImagesBis/ferns-small.jpg")) {// The image alignment to use:var ia = newImageAlign(ImageAlignHorz.Center, ImageAlignVert.Bottom, true, true, true, false, false);// Create and set up the document:var doc = newGcPdfDocument();var page = doc.NewPage();var g = page.Graphics;// Create and set up a TextLayout object to print the text:var tl = g.CreateTextLayout(); tl.MaxWidth = page.Size.Width; tl.MaxHeight = page.Size.Height; tl.MarginLeft = tl.MarginRight = tl.MarginTop = tl.MarginBottom = 36; tl.DefaultFormat.Font = StandardFonts.Times; tl.DefaultFormat.FontSize = 12; tl.DefaultFormat.BackColor = Color.LightGoldenrodYellow; tl.TextAlignment = TextAlignment.Justified;// Create inline objects using the images and arbitrary sizes:var ioPuffins = newInlineObject(imgPuffins, 36, 24);var ioFerns = newInlineObject(imgFerns, 36, 24);// Build up the text: tl.Append("The 'Inline objects' feature of the TextLayout class allows inserting arbitrary objects" +"into a block of text. Those objects are then treated exactly like other text runs, " +"and keep their positions relative to the surrounding text. " +"In this sample, we insert some images into the text as inline objects, " +"use the TextLayout class to position them along with text, and draw them " +"using the GcGraphics.DrawImage method."); tl.Append("Here are some puffins:"); tl.Append(ioPuffins); tl.Append("and here are some ferns:"); tl.Append(ioFerns); tl.Append("The end.");//System.Diagnostics.Debug.Assert(tl.InlineObjects.Count == 0, "InlineObjects is filled by RecalculateGlyphs");// This method fetches and measures the glyphs needed to render the text,// because we draw the same text a few times with different layout,// we call this once before the loop below: tl.RecalculateGlyphs();//System.Diagnostics.Debug.Assert(tl.InlineObjects.Count == 2, "InlineObjects is filled by RecalculateGlyphs");// In a loop, draw the text and inline images in 3 different locations// and bounds on the page:for (int i = 0; i < 3; ++i) { tl.MarginTop = tl.ContentRectangle.Bottom + 36; tl.MarginLeft = 36 + 72 * i; tl.MarginRight = 36 + 72 * i;// Note passing 'false' here, we do not need to recalc the glyphs because// the text has not changed: tl.PerformLayout(false);// Draw the text and images: g.DrawTextLayout(tl, PointF.Empty);foreach (var io in tl.InlineObjects) g.DrawImage((GCDRAW.Image)io.Object, io.ObjectRect.ToRectangleF(), null, ia); }// Done: doc.Save(stream);return doc.Pages.Count; } } }}