Question

hi iam working in phonegap IOS (cordova 2.0) i need a print Plugin and i found only one plugin that not supporting 2.0 - link only support up to cordova 1.5. anybody please help me , is there any PrintPlugin that support cordova 2.0.

Can anyone help ? ?

Was it helpful?

Solution

As of this writing, the PrintPlugin from the GitHub repository is targeted at Cordova 1.5. If you get that version, and make the following changes, you can compile within a Cordova 2.0 Project.

NOTICE: I have seen a bug in this entire plugin which is an issue with printing more than one page. I have found that it is related to a lack of logic to wait for the webView to complete load before printing. I am currently working a a new version of this plugin to allow for custom headers, page numbering etc. But for now..... ;)

In the current repository .m file, it has the following function declaration:

- (void) print:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options{
    NSUInteger argc = [arguments count];

    if (argc < 1) {
        return; 
    }
    self.printHTML = [arguments objectAtIndex:0];

  ... << snipped />> ... 


    [self doPrint];
}

This is followed with a separate doPrint function.

- (void) doPrint{
    if (![self isPrintServiceAvailable]){
        [self callbackWithFuntion:self.failCallback withData: @"{success: false, available: false}"];

        return;
    }

    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];

      if (!controller){
          return;
      }

        ... << snipped  (cut and paste to below) />> ...
}

I updated my local copy and merged the two into a single function, and utilized a different mechanism for obtaining the arguments. Following is my .m function declaration:

- (void) print:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options
{   
    // NSUInteger argc = [arguments count];

    NSString* printHTML = [options valueForKey:@"printHTML"];
    NSString* successCallback = [options valueForKey:@"success"];
    NSString* failCallback = [options valueForKey:@"fail"];
    NSString* dialogLeftPos = [options valueForKey:@"dialogLeftPos"];
    NSString* dialogTopPos = [options valueForKey:@"dialogTopPos"];


  UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];

  if (!controller){
      return;
  }

    ... <<  snipped (paste the rest from your original block here />> ...
}

I then also modified the .JS to create an object instead of simply the parameter list.

The current repository PrintPlugin.js has:

return Cordova.exec("PrintPlugin.print", printHTML, callbackPrefix + '.success', callbackPrefix + '.fail', dialogLeftPos, dialogTopPos);

return Cordova.exec("PrintPlugin.print", printHTML, callbackPrefix + '.success', callbackPrefix + '.fail', dialogLeftPos, dialogTopPos);

I changed this to the following:

var args = {
    'printHTML': printHTML,
    'success': callbackPrefix + '.success',
    'fail': callbackPrefix + '.fail', 
    'dialogLeftPos': dialogLeftPos,
    'dialogTopPos': dialogTopPos
};

cordova.exec(null, null, "PrintPlugin", "print", [args]);

Now, it may turn out that I could have simply changed the case in the Cordova to cordova, but that is pure hindsight. Either way, I hope this helps!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top