// // PDFNet Copyright (c) 2001-2008 by PDFTron Systems Inc. All Rights Reserved. // using System; using System.Drawing; using System.Drawing.Imaging; using pdftron; using pdftron.Common; using pdftron.PDF; using pdftron.SDF; namespace ImageExtractTestCS { class ImageExtractTest { /// ///----------------------------------------------------------------------------------- /// This sample illustrates one approach to PDF image extraction /// using PDFNet. /// /// Note: Besides direct image export, you can also convert PDF images /// to GDI+ Bitmap, or extract uncompressed/compressed image data directly /// using element.GetImageData() (e.g. as illustrated in ElementReaderAdv /// sample project). ///----------------------------------------------------------------------------------- /// static int image_counter = 0; // Relative path to the folder containing test files. static string input_path = "../../../../TestFiles/"; static string output_path = "../../../../TestFiles/Output/"; static void ImageExtract(ElementReader reader) { Element element; while ((element = reader.Next()) != null) { switch (element.GetType()) { case Element.Type.e_image: case Element.Type.e_inline_image: { Console.WriteLine("--> Image: {0}", ++image_counter); Console.WriteLine(" Width: {0}", element.GetImageWidth()); Console.WriteLine(" Height: {0}", element.GetImageHeight()); Console.WriteLine(" BPC: {0}", element.GetBitsPerComponent()); Matrix2D ctm = element.GetCTM(); double x2=1, y2=1; ctm.Mult(ref x2, ref y2); Console.WriteLine(" Coords: x1={0}, y1={1}, x2={2}, y2={3}", ctm.m_h, ctm.m_v, x2, y2); if (element.GetType() == Element.Type.e_image) { string fname = output_path + "image_extract1_" + image_counter.ToString(); pdftron.PDF.Image image = new pdftron.PDF.Image(element.GetXObject()); image.Export(fname); // or ExporAsPng() or ExporAsTiff() ... // Convert PDF bitmap to GDI+ Bitmap... //Bitmap bmp = element.GetBitmap(); //bmp.Save(fname, ImageFormat.Png); //bmp.Dispose(); // Instead of converting PDF images to a Bitmap, you can also extract // uncompressed/compressed image data directly using element.GetImageData() // as illustrated in ElementReaderAdv sample project. } break; } case Element.Type.e_form: // Process form XObjects { reader.FormBegin(); ImageExtract(reader); reader.End(); break; } } } } static void Main(string[] args) { PDFNet.Initialize(); PDFNet.SetResourcesPath("../../../../../resources"); // Example 1: // Extract images by traversing the display list for // every page. With this approach it is possible to obtain // image positioning information and DPI. try { PDFDoc doc = new PDFDoc(input_path + "newsletter.pdf"); doc.InitSecurityHandler(); ElementReader reader = new ElementReader(); PageIterator itr; for (itr=doc.GetPageIterator(); itr.HasNext(); itr.Next()) { reader.Begin(itr.Current()); ImageExtract(reader); reader.End(); } doc.Close(); Console.WriteLine("Done."); } catch (PDFNetException e) { Console.WriteLine(e.Message); } Console.WriteLine("----------------------------------------------------------------"); // Example 2: // Extract images by scanning the low-level document. try { PDFDoc doc = new PDFDoc(input_path + "newsletter.pdf"); doc.InitSecurityHandler(); image_counter = 0; SDFDoc cos_doc = doc.GetSDFDoc(); int num_objs = cos_doc.XRefSize(); for (int i=1; i Image: {0}", ++image_counter); Console.WriteLine(" Width: {0}", image.GetImageWidth()); Console.WriteLine(" Height: {0}", image.GetImageHeight()); Console.WriteLine(" BPC: {0}", image.GetBitsPerComponent()); string fname = output_path + "image_extract2_" + image_counter.ToString(); image.Export(fname); // or ExporAsPng() or ExporAsTiff() ... // Convert PDF bitmap to GDI+ Bitmap... //Bitmap bmp = image.GetBitmap(); //bmp.Save(fname, ImageFormat.Png); //bmp.Dispose(); // Instead of converting PDF images to a Bitmap, you can also extract // uncompressed/compressed image data directly using element.GetImageData() // as illustrated in ElementReaderAdv sample project. } } doc.Close(); Console.WriteLine("Done."); } catch (PDFNetException e) { Console.WriteLine(e.Message); } PDFNet.Terminate(); } } }