2012-09-26 249 views

回答

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); 

返回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]); 

,其結果可能是,我可以簡單地在科爾多瓦改變的情況下,以科爾多瓦,但是這是純粹的事後諸葛亮。無論哪種方式,我希望這有助於!

+0

嗯......對不起,我以爲我直接回答了這個問題。 –

+0

具體來說....從存儲庫(與Cordova 1.5一起使用)獲取當前的PrintPlugin。進行上面指定的更改。在Cordova 2.0項目下編譯。您現在擁有兼容Cordova 2.0的PrintPlugin。 –

+0

抱歉,泰勒,我誤解了。 :) –