2014-04-30 3 views
1

Je tente d'imprimer un fichier PDF dans mon application Cordova sur iOS.Impression PDF sur iOS, image d'arrière-plan ne pas imprimer

Le fichier est généré en utilisant jsPDF dans l'application Cordova, puis j'ai modifié le katzer cordova-plugin-printer pour accepter les données PDF brutes sous forme de chaîne, les convertir en NSData et les imprimer.

- (void) printPDFFromData:(CDVInvokedUrlCommand*)command 
{ 
    if (!self.isPrintingAvailable) 
    { 
     return; 
    } 

    NSArray* arguments = [command arguments]; 
    NSString* documentData = [arguments objectAtIndex:0]; 
    NSData* pdfData = [documentData dataUsingEncoding:NSUTF8StringEncoding]; 

    UIPrintInteractionController* controller = printController; 

    [self adjustSettingsForPrintController:controller]; 
    controller.printingItem = pdfData; 

    [self openPrintController:controller]; 

    [self commandDelegate]; 
} 

Utilisation du simulateur d'impression iOS (je n'ai pas accès à une imprimante AirPrint), le PDF semble imprimer, sauf que l'image d'arrière-plan n'est pas imprimé, seulement les dessins vectoriels superposant.

Les mêmes données de sortie brutes lors de l'enregistrement dans un fichier PDF affichent l'image d'arrière-plan et lorsque vous imprimez ce fichier, l'image d'arrière-plan est imprimée.

S'agit-il simplement d'une anomalie du simulateur d'imprimante ou dois-je paramétrer le contrôleur d'impression pour pouvoir imprimer l'image dans le document?

Répondre

0

J'ai trouvé une solution au problème. Quelque chose se perdait dans le décodage des données de chaîne de JavaScript en Objective-C.

Pour contourner cela, je base64 encodée le document PDF dans mon côté JS avant de l'envoyer au plug-in:

var startIndexOfBase64Data = 28; 
var base64Document = doc.output('dataurlstring').substring(startIndexOfBase64Data); 
window.plugin.printer.printPDFFromData(base64Document); 

Puis je devais ajouter

NSData + Base64.m et NSData + Base64.h

de this sample project dans mon répertoire plugins pour permettre cette ligne de code pour convertir la chaîne en base64 NSData:

NSData* pdfData = [NSData dataFromBase64String:documentData]; 

Ensuite, le document a été imprimé sans tache.

Maintenant, je suis hors voir si je peux le faire fonctionner avec Android.

+0

J'ai également besoin d'imprimer des données pdf de base64 crues à partir d'une application PhoneGap (iOS) - avez-vous par hasard une fourche publique du plugin katzer modifié que vous avez utilisé? – user1031947