2

嗨,我在 phonegap IOS (cordova 2.0) 工作,我需要一个打印插件,但我发现只有一个不支持 2.0 的插件- 链接 只支持到 cordova 1.5。任何人请帮助我,是否有任何支持cordova 2.0的PrintPlugin。

任何人都可以帮忙吗??

4

1 回答 1

0

在撰写本文时,来自 GitHub 存储库的 PrintPlugin 面向 Cordova 1.5。如果您获得该版本并进行以下更改,则可以在 Cordova 2.0 项目中进行编译。

注意:我在整个插件中看到了一个错误,这是打印多页的问题。我发现这与在打印前等待 webView 完成加载缺乏逻辑有关。我目前正在开发这个插件的新版本,以允许自定义标题、页码等。但现在.....;)

在当前存储库 .m 文件中,它具有以下函数声明:

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

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

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


    [self doPrint];
}

随后是一个单独的 doPrint 函数。

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

我更新了本地副本并将两者合并为一个函数,并使用不同的机制来获取参数。以下是我的 .m 函数声明:

- (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 />> ...
}

然后我还修改了 .JS 以创建一个对象,而不是简单的参数列表。

当前存储库 PrintPlugin.js 具有:

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

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

我将其更改为以下内容:

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

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

现在,结果可能是我可以简单地将 Cordova 的案例更改为cordova,但这纯粹是事后诸葛亮。无论哪种方式,我希望这会有所帮助!

于 2012-10-11T21:11:35.417 回答