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