title: Reading PDF files as string through iPhone application
body: <p>I am facing some problem in iPhone application development for "Reading PDF".
  I have tried following code. I know I have used wrong methods for parsing - parsing methods are just used for searching purpose. But I want to convert entire pdf text in to a string. Say for example Apple's MobileHIG.pdf - I have used in this code.</p>
  
  <pre><code>@implementation NetPDFViewController
  
  size_t totalPages;  // a variable to store total pages
  
  // a method to get the pdf ref
  CGPDFDocumentRef MyGetPDFDocumentRef (const char *filename) {
      CFStringRef path;
      CFURLRef url;
      CGPDFDocumentRef document;
      path = CFStringCreateWithCString (NULL, filename,kCFStringEncodingUTF8);
      url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0);
      CFRelease (path);
      document = CGPDFDocumentCreateWithURL (url);// 2
      CFRelease(url);
      int count = CGPDFDocumentGetNumberOfPages (document);// 3
      if (count == 0) {
          printf("`%s' needs at least one page!", filename);
          return NULL;
      }
      return document;
  }
  
  // table methods to parse pdf
  static void op_MP (CGPDFScannerRef s, void *info) {
      const char *name;
      if (!CGPDFScannerPopName(s, &amp;name))
          return;
      printf("MP /%s\n", name);   
  }
  
  static void op_DP (CGPDFScannerRef s, void *info) {
      const char *name;
      if (!CGPDFScannerPopName(s, &amp;name))
          return;
      printf("DP /%s\n", name);   
  }
  
  static void op_BMC (CGPDFScannerRef s, void *info) {
      const char *name;
      if (!CGPDFScannerPopName(s, &amp;name))
          return;
      printf("BMC /%s\n", name);  
  }
  
  static void op_BDC (CGPDFScannerRef s, void *info) {
      const char *name;
      if (!CGPDFScannerPopName(s, &amp;name))
          return;
      printf("BDC /%s\n", name);  
  }
  
  static void op_EMC (CGPDFScannerRef s, void *info) {
      const char *name;
      if (!CGPDFScannerPopName(s, &amp;name))
          return;
      printf("EMC /%s\n", name);  
  }
  
  // a method to display pdf page.
  
  void MyDisplayPDFPage (CGContextRef myContext,size_t pageNumber,const char *filename) {
      CGPDFDocumentRef document;
      CGPDFPageRef page;
      document = MyGetPDFDocumentRef (filename);// 1
      totalPages=CGPDFDocumentGetNumberOfPages(document);
      page = CGPDFDocumentGetPage (document, pageNumber);// 2
  
      CGPDFDictionaryRef d;
  
      d = CGPDFPageGetDictionary(page);
  
  // ----- edit   problem here - CGPDFDictionary is completely unknown 
  // ----- as we don't know keys &amp; values of it.
      CGPDFScannerRef myScanner; 
      CGPDFOperatorTableRef myTable;
      myTable = CGPDFOperatorTableCreate();
      CGPDFOperatorTableSetCallback (myTable, "MP", &amp;op_MP);
      CGPDFOperatorTableSetCallback (myTable, "DP", &amp;op_DP);
      CGPDFOperatorTableSetCallback (myTable, "BMC", &amp;op_BMC);
      CGPDFOperatorTableSetCallback (myTable, "BDC", &amp;op_BDC);
      CGPDFOperatorTableSetCallback (myTable, "EMC", &amp;op_EMC);
  
      CGPDFContentStreamRef myContentStream = CGPDFContentStreamCreateWithPage (page);// 3
      myScanner = CGPDFScannerCreate (myContentStream, myTable, NULL);// 4
  
      CGPDFScannerScan (myScanner);// 5
  
  //  CGPDFDictionaryRef d;
  
      CGPDFStringRef str; // represents a sequence of bytes
  
      d = CGPDFPageGetDictionary(page);
  
      if (CGPDFDictionaryGetString(d, "Thumb", &amp;str)){
          CFStringRef s;
          s = CGPDFStringCopyTextString(str);
          if (s != NULL) {
              //need something in here in case it cant find anything
              NSLog(@"%@ testing it", s);
          }
          CFRelease(s);       
  //      CFDataRef data = CGPDFStreamCopyData (stream, CGPDFDataFormatRaw);
      }
  
  // -----------------------------------  
  
      CGContextDrawPDFPage (myContext, page);// 3
      CGContextTranslateCTM(myContext, 0, 20);
      CGContextScaleCTM(myContext, 1.0, -1.0);
      CGPDFDocumentRelease (document);// 4
  }
  
  - (void)viewDidLoad {
      [super viewDidLoad];
  
  
  // -------------------------------------------------------- 
  // code for simple direct image from pdf docs.
      UIGraphicsBeginImageContext(CGSizeMake(320, 460));
      initialPage=28;
      MyDisplayPDFPage(UIGraphicsGetCurrentContext(), initialPage, [[[NSBundle mainBundle] pathForResource:@"MobileHIG" ofType:@"pdf"] UTF8String]);
      imgV.image=UIGraphicsGetImageFromCurrentImageContext();
      imgV.image=[imgV.image rotate:UIImageOrientationDownMirrored];  
  }
  
  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      UITouch *touch = [touches anyObject];
      CGPoint LasttouchPoint =  [touch locationInView:self.view];
      int LasttouchX = LasttouchPoint.x;
      startpoint=LasttouchX;
  }
  
  
  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
  
  }
  
  - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
      UITouch *touch = [touches anyObject];
      CGPoint LasttouchPoint =  [touch locationInView:self.view];
      int LasttouchX = LasttouchPoint.x;
      endpoint=LasttouchX;
      if(startpoint&gt;(endpoint+75)){
          initialPage++;
          [self loadPage:initialPage nextOne:YES];
      } else if((startpoint+75)&lt;endpoint){
          initialPage--;
          [self loadPage:initialPage nextOne:NO];
      }
  }
  
  
  -(void)loadPage:(NSUInteger)page nextOne:(BOOL)yesOrNo{
      if(page&lt;=totalPages &amp;&amp; page&gt;0){
          UIGraphicsBeginImageContext(CGSizeMake(720, 720));  
          MyDisplayPDFPage(UIGraphicsGetCurrentContext(), page, [[[NSBundle mainBundle] pathForResource:@"MobileHIG" ofType:@"pdf"] UTF8String]);
  
          CATransition *transition = [CATransition animation];
          transition.duration = 0.75;
          transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
          transition.type=kCATransitionPush;
          if(yesOrNo){
              transition.subtype=kCATransitionFromRight;
          } else {
              transition.subtype=kCATransitionFromLeft;
          }
  
          transition.delegate = self;
          [imgV.layer addAnimation:transition forKey:nil];
          imgV.image=UIGraphicsGetImageFromCurrentImageContext();
          imgV.image=[imgV.image rotate:UIImageOrientationDownMirrored];
      }
  }
  </code></pre>
  
  <p>But I didn't get success to read even a single line from the pdf document.
  What is still missing?</p>