//--------------------------------------------------------------------------------------- // Copyright (c) 2001-2008 by PDFTron Systems Inc. All Rights Reserved. // Consult legal.txt regarding legal and license information. //--------------------------------------------------------------------------------------- using System; using System.Drawing; using pdftron; using pdftron.Common; using pdftron.PDF; using pdftron.SDF; namespace PDFDrawTestCS { /// //--------------------------------------------------------------------------------------- // The following sample illustrates how to convert PDF documents to various raster image // formats (such as PNG, JPEG, BMP, TIFF), as well as how to convert a PDF page to GDI+ Bitmap // for further manipulation and/or display in WinForms applications. //--------------------------------------------------------------------------------------- /// class PDFDrawTestCS { /// /// The main entry point for the application. /// static void Main(string[] args) { // The first step in every application using PDFNet is to initialize the // library and set the path to common PDF resources. The library is usually // initialized only once, but calling Initialize() multiple times is also fine. PDFNet.Initialize(); PDFNet.SetResourcesPath("../../../../../resources"); try { // Optional: Set ICC color profiles to fine tune color conversion // for PDF 'device' color spaces. You can use your own ICC profiles. // Standard Adobe color profiles can be download from Adobes site: // http://www.adobe.com/support/downloads/iccprofiles/iccprofiles_win.html // // Simply drop all *.icc files in PDFNet resource folder or you specify // the full pathname. //--- // PDFNet.SetColorManagement(true); // PDFNet.SetDefaultDeviceCMYKProfile("USWebCoatedSWOP.icc"); // will search in PDFNet resource folder. // PDFNet.SetDefaultDeviceRGBProfile("AdobeRGB1998.icc"); // Optional: Set predefined font mappings to override default font // substitution for documents with missing fonts. For example: //--- // PDFNet.AddFontSubst("StoneSans-Semibold", "C:/WINDOWS/Fonts/comic.ttf"); // PDFNet.AddFontSubst("StoneSans", "comic.ttf"); // search for 'comic.ttf' in PDFNet resource folder. // PDFNet.AddFontSubst(PDFNet.CharacterOrdering.e_Identity, "C:/WINDOWS/Fonts/arialuni.ttf"); // PDFNet.AddFontSubst(PDFNet.CharacterOrdering.e_Japan1, "C:/Program Files/Adobe/Acrobat 7.0/Resource/CIDFont/KozMinProVI-Regular.otf"); // PDFNet.AddFontSubst(PDFNet.CharacterOrdering.e_Japan2, "c:/myfonts/KozMinProVI-Regular.otf"); // // If fonts are in PDFNet resource folder, it is not necessary to specify // the full path name. For example, //--- // PDFNet.AddFontSubst(PDFNet.CharacterOrdering.e_Korea1, "AdobeMyungjoStd-Medium.otf"); // PDFNet.AddFontSubst(PDFNet.CharacterOrdering.e_CNS1, "AdobeSongStd-Light.otf"); // PDFNet.AddFontSubst(PDFNet.CharacterOrdering.e_GB1, "AdobeMingStd-Light.otf"); } catch (Exception) { Console.WriteLine("The specified color profile was not found."); } // Relative path to the folder containing test files. string input_path = "../../../../TestFiles/"; string output_path = "../../../../TestFiles/Output/"; PDFDraw draw = new PDFDraw(); // PDFDraw class is used to rasterize PDF pages. //-------------------------------------------------------------------------------- // Example 1) Convert the first PDF page to PNG at 92 DPI. // A three step tutorial to convert PDF page to an image. try { // A) Open the PDF document. PDFDoc doc = new PDFDoc(input_path + "tiger.pdf"); // Initialize the security handler, in case the PDF is encrypted. doc.InitSecurityHandler(); // B) The output resolution is set to 92 DPI. draw.SetDPI(92); // C) Rasterize the first page in the document and save the result as PNG. Page pg = doc.GetPage(1); draw.Export(pg, output_path + "tiger_92dpi.png"); Console.WriteLine("Example 1: {0}. Done.", output_path + "tiger_92dpi.png"); // Export the same page as TIFF draw.Export(pg, output_path + "tiger_92dpi.tif", "TIFF"); } catch (PDFNetException e) { Console.WriteLine(e.Message); } //-------------------------------------------------------------------------------- // Example 2) Convert the all pages in a given document to JPEG at 72 DPI. ObjSet hint_set=new ObjSet(); // A collection of rendering 'hits'. Console.WriteLine("Example 2:"); try { PDFDoc doc = new PDFDoc(input_path + "newsletter.pdf"); // Initialize the security handler, in case the PDF is encrypted. doc.InitSecurityHandler(); draw.SetDPI(72); // Set the output resolution is to 72 DPI. // Use optional encoder parameter to specify JPEG quality. Obj encoder_param = hint_set.CreateDict(); encoder_param.PutNumber("Quality", 80); // Traverse all pages in the document. for (PageIterator itr=doc.GetPageIterator(); itr.HasNext(); itr.Next()) { string outname = string.Format("{0}newsletter{1:d}.jpg", output_path, itr.GetPageNumber()); Console.WriteLine(outname); draw.Export(itr.Current(), outname, "JPEG", encoder_param); } Console.WriteLine("Done"); } catch (PDFNetException e) { Console.WriteLine(e.Message); } try // Examples 3-5 { // Common code for remaining samples. PDFDoc tiger_doc = new PDFDoc(input_path + "tiger.pdf"); // Initialize the security handler, in case the PDF is encrypted. tiger_doc.InitSecurityHandler(); Page page = tiger_doc.GetPage(1); //-------------------------------------------------------------------------------- // Example 3) Convert the first page to GDI+ Bitmap. Also, rotate the // page 90 degrees and save the result as TIFF. draw.SetDPI(100); // Set the output resolution is to 100 DPI. draw.SetRotate(Page.Rotate.e_90); // Rotate all pages 90 degrees clockwise. System.Drawing.Bitmap bmp = draw.GetBitmap(page); bmp.Save(output_path + "tiger_100dpi_rot90.tif", System.Drawing.Imaging.ImageFormat.Tiff); Console.WriteLine("Example 3: {0}. Done.", output_path + "tiger_100dpi_rot90.tif"); draw.SetRotate(Page.Rotate.e_0); // Disable image rotation for remaining samples. //-------------------------------------------------------------------------------- // Example 4) Convert PDF page to a fixed image size. Also illustrates some // other features in PDFDraw class such as rotation, image stretching, exporting // to grayscale, or monochrome. // Initialize render 'gray_hint' parameter, that is used to control the // rendering process. In this case we tell the rasterizer to export the image as // 1 Bit Per Component (BPC) image. Obj mono_hint=hint_set.CreateDict(); mono_hint.PutNumber("BPC", 1); // SetImageSize can be used instead of SetDPI() to adjust page scaling // dynamically so that given image fits into a buffer of given dimensions. draw.SetImageSize(1000, 1000); // Set the output image to be 1000 wide and 1000 pixels tall draw.Export(page, output_path + "tiger_1000x1000.png", "PNG", mono_hint); Console.WriteLine("Example 4: {0}. Done.", output_path + "tiger_1000x1000.png"); draw.SetImageSize(200, 400); // Set the output image to be 200 wide and 300 pixels tall draw.SetRotate(Page.Rotate.e_180); // Rotate all pages 90 degrees clockwise. // 'gray_hint' tells the rasterizer to export the image as grayscale. Obj gray_hint=hint_set.CreateDict(); gray_hint.PutName("ColorSpace", "Gray"); draw.Export(page, output_path + "tiger_200x400_rot180.png", "PNG", gray_hint); Console.WriteLine("Example 4: {0}. Done.", output_path + "tiger_200x400_rot180.png"); draw.SetImageSize(400, 200, false); // The third parameter sets 'preserve-aspect-ratio' to false. draw.SetRotate(Page.Rotate.e_0); // Disable image rotation. draw.Export(page, output_path + "tiger_400x200_stretch.jpg", "JPEG"); Console.WriteLine("Example 4: {0}. Done.", output_path + "tiger_400x200_stretch.jpg"); //-------------------------------------------------------------------------------- // Example 5) Zoom into a specific region of the page and rasterize the // area at 200 DPI and as a thumbnail (i.e. a 50x50 pixel image). page.SetCropBox(new Rect(216, 522, 330, 600)); // Set the page crop box. // Select the crop region to be used for drawing. draw.SetPageBox(Page.Box.e_crop); draw.SetDPI(900); // Set the output image resolution to 900 DPI. draw.Export(page, output_path + "tiger_zoom_900dpi.png", "PNG"); Console.WriteLine("Example 5: {0}. Done.", output_path + "tiger_zoom_900dpi.png"); draw.SetImageSize(50, 50); // Set the thumbnail to be 50x50 pixel image. draw.Export(page, output_path + "tiger_zoom_50x50.png", "PNG"); Console.WriteLine("Example 5: {0}. Done.", output_path + "tiger_zoom_50x50.png"); } catch (PDFNetException e) { Console.WriteLine(e.Message); } draw.Dispose(); // Explicitly clean-up allocated memory // Calling Terminate when PDFNet is no longer in use is a good // practice, but it is not required. PDFNet.Terminate(); } } }