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