Tuesday, June 18, 2013

Convert PDF to image on iPhone, Xamarin iOS sample

Introduction

    In my previous post I described how to convert PDF file to image on Android device using Xamarin.Android.

    While Android is an extremely popular operating system nowadays, we can’t forget about another important player on this market – the iOS, and recent WWDC brought us to  iOS7, the os developers will be creating products for in upcoming year.


    Having the Xamarin, it’s now possible to create apps for both platforms sharing huge amount of code and saving time on support and maintenance, and we are going to show you how to use ApitronPDF Rasterizer for .NET and create your own PDF conversion app for iOS.

Getting ready

    If you are familiar with iOS development and Xamarin already, that’s great. But if you’re new to this world it might be useful to get the basic understanding of how it works.

    Here you can read about Xamarin - http://xamarin.com/monotouch And here you can find a “Hello, world” sample to start and play with http://docs.xamarin.com/guides/ios/getting_started/hello%2C_world

Checking out the rasterizer sample

Note: The sample assumes that you have Xamarin tools installed, I used Xamarin Studio on Mac and ran the sample on iPhone Simulator 6.1 device. It should work fine if you use MS Visual Studio though.

  1. Download the latest Apitron PDF Rasterizer package from here , unzip, navigate to Samples/IosSampleProject and open a corresponding project.
  2. Select iPhone Simulator 6.1 in devices menu and click Run
    Sample project opened in Xamarin Studio
  3. When iPhone simulator opens  you’ll see the app screen with brief description :
Main application screen

Click “Start rendering”. App starts PDF file conversion (the file is included into the Application Bundle for demo).

4. Once the conversion is finished you’ll see a notification message:

Finished processing


5. Press "Home"  and navigate to Photos, in Saved photos album you’ll see the resulting image:

Converted image preview


    That’s it! See “The Code” section below for code overview.

The code

Here is sample code that handles the button click event and does conversion:

// open a PDF file from app bundle
using(Stream stream  = File.OpenRead(Path.Combine(NSBundle.MainBundle.BundlePath,"testfile.pdf")))
{
    // construct the document
    Document doc = new Document (stream);
                    
    // we are going to render first page from the document
    Page page = doc.Pages [0];

    int w = (int)page.Width;
    int h = (int)page.Height;
             
    // render the page to a raw bitmap data represented by byte array
    byte[] imageData = ConvertBGRAtoRGBA(page.RenderAsBytes (w,h, new RenderingSettings (), null));

    // create CGDataProvider which will serve CGImage creation
    CGDataProvider dataProvider = new CGDataProvider (imageData, 0, imageData.Length);

    // create core graphics image using data provider created above, note that
    // we use CGImageAlphaInfo.Last(ARGB) pixel format
    CGImage cgImage = new CGImage(w,h,8,32,w*4,CGColorSpace.CreateDeviceRGB(),CGImageAlphaInfo.Last,dataProvider,null,falseCGColorRenderingIntent.Default);

   // create UIImage and save it to gallery
   UIImage finalImage = new UIImage (cgImage);

   finalImage.SaveToPhotosAlbum (null);

   // show notification message
   UIAlertView view = new UIAlertView ("Message",string.Format("Image has been saved to photo gallery"),null,"Ok",null);

   view.Show ();
}

Complete code can be found in [Component Package]\Samples\IosSampleProject folder.

No comments:

Post a Comment