嗨,我在 phonegap IOS (cordova 2.0) 工作,我需要一个打印插件,但我发现只有一个不支持 2.0 的插件- 链接 只支持到 cordova 1.5。任何人请帮助我,是否有任何支持cordova 2.0的PrintPlugin。
任何人都可以帮忙吗??
嗨,我在 phonegap IOS (cordova 2.0) 工作,我需要一个打印插件,但我发现只有一个不支持 2.0 的插件- 链接 只支持到 cordova 1.5。任何人请帮助我,是否有任何支持cordova 2.0的PrintPlugin。
任何人都可以帮忙吗??
在撰写本文时,来自 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,但这纯粹是事后诸葛亮。无论哪种方式,我希望这会有所帮助!