//// This code is part of Document Solutions for PDF .NET demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem;usingSystem.IO;usingSystem.Drawing;usingGrapeCity.Documents.Pdf;usingGrapeCity.Documents.Text;usingGrapeCity.Documents.Drawing;usingGCTEXT = GrapeCity.Documents.Text;usingGCDRAW = GrapeCity.Documents.Drawing; namespaceDsPdfWeb.Demos{// Using image alignment options in DsPdf.// (This example replaces the older RawImages example; the RawImage class is obsolete and should not be used.)//// NOTE: When you render an image in DsPdf multiple times (e.g. rendering// the same image as part of a page header on all pages), it will automatically be// added to a dictionary and reused throughout the document, provided you use// the same image object on all pages. So rather than loading the same image from// file (or stream) each time it is needed, it is always preferable to load the image// once and cache it in an image object. This applies to all image types used in DsPdf.publicclassImageAlignment {publicintCreatePDF(Stream stream) {var doc = newGcPdfDocument(); // Text format used to draw captions:var tf = newTextFormat() { Font = StandardFonts.Times, FontSize = 12 }; // Action to draw the image with various alignment options:voiddrawImage(GCDRAW.Image image_, Page page_, ImageAlign ia_, bool clip_) {var rect = newRectangleF(72, 72, 72 * 4, 72 * 4);var clipped = clip_ ? "clipped to a 4\"x4\" rectangle" : "without clipping";var align = ia_ == ImageAlign.Default ? "ImageAlign.Default" : ia_ == ImageAlign.CenterImage ? "ImageAlign.CenterImage" : ia_ == ImageAlign.StretchImage ? "ImageAlign.StretchImage" : "custom ImageAlign";// Draw image caption: page_.Graphics.DrawString($"Page {doc.Pages.IndexOf(page_) + 1}: Image drawn at (1\",1\"), {clipped}, using {align}:", tf, newPointF(72, 36));var clip = clip_ ? newNullable<RectangleF>(rect) : newNullable<RectangleF>();// Draw the image: page_.Graphics.DrawImage(image_, rect, clip, ia_, outRectangleF[] imageRects);// Show the image outline: page_.Graphics.DrawRectangle(imageRects[0], Color.Red, 1, null);// Show image/clip area: page_.Graphics.DrawRectangle(rect, Color.Blue, 1, null); } // Create images from JPEG files (using the same Image class instance to draw an image// in a PDF ensures that the image data will be reused and not duplicated in the PDF):usingvar image = GCDRAW.Image.FromFile(Path.Combine("Resources", "Images", "puffins.jpg"));usingvar imageSmall = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "puffins-small.jpg")); // The ImageAlign class provides various image alignment options.// It also defines a few static instances with some commonly used// combinations of options demonstrated below. // Page 1: draw image without clipping, with default alignment:drawImage(image, doc.NewPage(), ImageAlign.Default, false); // Page 2: draw image with clipping, with default alignment:drawImage(image, doc.NewPage(), ImageAlign.Default, true); // Page 3: draw image with clipping, with CenterImage alignment:drawImage(image, doc.NewPage(), ImageAlign.CenterImage, true); // Page 4: draw image without clipping and stretched image:drawImage(image, doc.NewPage(), ImageAlign.StretchImage, false); // Page 5: draw image without clipping, fit into the rectangle, preserving aspect ratio:var ia = newImageAlign(ImageAlignHorz.Center, ImageAlignVert.Center, true, true, true, false, false);drawImage(image, doc.NewPage(), ia, false); // Page 6: draw a small image tiled, without clipping, fit into the rectangle, preserving aspect ratio: ia = newImageAlign(ImageAlignHorz.Left, ImageAlignVert.Top, false, false, true, true, true);drawImage(imageSmall, doc.NewPage(), ia, false); // Done: doc.Save(stream);return doc.Pages.Count; } }}