GetImageProperties.cs
 // // This code is part of Document Solutions for PDF demos. // Copyright (c) MESCIUS inc. All rights reserved. // using System; using System.IO; using System.Drawing; using System.Collections.Generic; using GrapeCity.Documents.Pdf; using GrapeCity.Documents.Pdf.Graphics.Images; using GrapeCity.Documents.Pdf.Spec; using GrapeCity.Documents.Text; using GrapeCity.Documents.Drawing; namespace DsPdfWeb.Demos { // This example shows how to fetch low level information about images living in a PDF file, // such as the ID of the image object in the PDF, the filter used to store the image, // the decoder parameters, the content of the PdfImage dictionary, etc. // The original PDF is appended to the result for reference. public class GetImageProperties { public int CreatePDF(Stream stream) { using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "Wetlands.pdf")); var docSrc = new GcPdfDocument(); docSrc.Load(fs); // Get the images in the loaded PDF and print their info into the resulting PDF: var imageInfos = docSrc.GetImages(); // The PDF to hold the results: var doc = new GcPdfDocument(); var page = doc.NewPage(); // Set up a TextLayout to format the results: var tl = page.Graphics.CreateTextLayout(); tl.DefaultFormat.Font = StandardFonts.Courier; tl.DefaultFormat.FontSize = 14; tl.MaxWidth = doc.PageSize.Width; tl.MaxHeight = doc.PageSize.Height; tl.MarginAll = tl.Resolution; var captionFmt = new TextFormat(tl.DefaultFormat) { Font = StandardFonts.CourierBold, FontSize = tl.DefaultFormat.FontSize + 2 }; int i = 0; foreach (var imageInfo in imageInfos) { tl.AppendLine($"Image {++i}", captionFmt); // PdfImageBase class represents an image in the loaded PDF file: PdfImageBase img = imageInfo.Image; tl.AppendLine($"PdfImage object ID: {img.ObjID}"); // PdfImageBase is derived from PdfDictWrapper type, it has methods // that allow you to access properties/data of the underlying PDF stream object: using (PdfStreamInfo psi = img.GetPdfStreamInfo()) { tl.AppendLine($" Image stream length: {psi.Stream.Length}"); tl.AppendLine($" ImageFilterName: {psi.ImageFilterName}"); tl.AppendLine($"ImageFilterDecodeParams: {psi.ImageFilterDecodeParams}"); // Dump the content of the ImageFilterDecodeParams if it exists: if (psi.ImageFilterDecodeParams != null) { foreach (var kvp in psi.ImageFilterDecodeParams.Dict) { tl.AppendLine($"{kvp.Key}: {kvp.Value}"); } // An example of how to get the value of BlackIs1: var blackIs1 = psi.ImageFilterDecodeParams.GetBool(PdfName.Std.BlackIs1, null); tl.AppendLine($"BlackIs1: {blackIs1}"); } } // Dump the properties of PdfImage dictionary: tl.AppendLine(); tl.AppendLine("Properties of PdfImage dictionary:"); foreach (KeyValuePair<PdfName, IPdfObject> kvp in img.PdfDict.Dict) { tl.AppendLine($"{kvp.Key}: {kvp.Value}"); } // var cs = img.Get<IPdfObject>(PdfName.Std.ColorSpace); tl.AppendLine($"ColorSpace: {cs.GetType().Name} {cs}"); var bpc = img.Get<IPdfObject>(PdfName.Std.BitsPerComponent); tl.AppendLine($"BitsPerComponent: {bpc?.GetType().Name} {bpc}"); tl.AppendLine(); } // Render the results: tl.PerformLayout(true); while (true) { var splitResult = tl.Split(null, out TextLayout rest); page.Graphics.DrawTextLayout(tl, PointF.Empty); if (splitResult != SplitResult.Split) break; tl = rest; tl.MarginTop = tl.Resolution; page = doc.Pages.Add(); } // Append the source PDF to the result for reference: doc.MergeWithDocument(docSrc); // Done: doc.Save(stream); return doc.Pages.Count; } } }