2015-07-23 1 views
1

Dans notre application Android, nous pouvons imprimer des images avec succès sur une imprimante P4T. Nous utilisons la commande pcx cpcl pour imprimer une image en ligne avec un autre texte de reçu. Juste avant d'imprimer le reçu, nous téléchargeons l'image dans la mémoire de l'imprimante à l'aide du zebra sdk. Nous avons zèbre d'abord convertir notre bitmap en ZebraImage et ensuite le télécharger. Sur le P4T, il en résulte un fichier .PCX que nous référençons ensuite dans notre label cpcl. Exemple:Zebra Android Impression avec des images v2.8.2148 imprimer en tant que chaîne au lieu de pixels

config imprimante:

E:signature.pcx 

dans l'application Android:

static private void sendImagesToPrinter(DevicePrinter devicePrinter, List<String> imagesToSend, String rootPath) throws IOException, ConnectionException, ZebraPrinterLanguageUnknownException, ZebraIllegalArgumentException { 
    for(String image:imagesToSend) { 
     //[0] -> image path, <[1]> -> image scale factor 
     String[] imageParams = image.split("\\|"); 
     double scaleFactor = imageParams.length > 1 ? parseImageScale(imageParams[1]) : 1.0d; 

     File file = new File(StringUtils.pathCombine(rootPath,imageParams[0])); 
     if(!file.exists()) 
      throw new FileNotFoundException("Image file not found " + file.getName()); 

     ZebraImageI zebraImage = ZebraImageFactory.getImage(BitmapFactory.decodeFile(file.getAbsolutePath())); 

     devicePrinter.storeImage("E:" + file.getName(), zebraImage, (int)(zebraImage.getWidth() * scaleFactor), (int)(zebraImage.getHeight() * scaleFactor)); 
    } 
} 

public void storeImage(String printerFullPath, ZebraImageI zebraImage, int width, int height) throws ConnectionException, ZebraPrinterLanguageUnknownException, IOException, ZebraIllegalArgumentException { 
    Connection connection = null; 
    try { 
     connection = ConnectionBuilder.build(connectionString); 
     connection.open(); 
     ZebraPrinter printer = ZebraPrinterFactory.getInstance(connection); 

     printer.storeImage(printerFullPath, zebraImage, width, height); 

    } 
    finally { 
     if(connection != null) 
      connection.close(); 
    } 
} 

Le fichier format CPCL:

PCX 10 280 !<signature.pcx 

Nous fixons un paramètre de mise à l'échelle pour gérer le imprimante- taille de l'image stockée. Cela imprime l'image bien sur l'imprimante P4T, mais nous avons un QLn420 qui imprime une longue représentation de la chaîne de caractères de l'image.

Les autres parties de texte du reçu s'impriment normalement sur ces périphériques.

Quelqu'un at-il rencontré ce problème et sait comment y remédier?

* Édition J'ai également essayé d'imprimer directement une image zébrée sur l'imprimante en utilisant le code suivant. Peu importe qui, je reçois toujours la chaîne (représentation base64 de l'image.)

public void printImage(ZebraImageI zebraImage, int width, int height) throws ConnectionException, ZebraPrinterLanguageUnknownException, ZebraIllegalArgumentException { 
    Connection connection = null; 
    try { 
     connection = ConnectionBuilder.build(connectionString); 
     connection.open(); 
     ZebraPrinter printer = ZebraPrinterFactory.getInstance(connection); 
     printer.printImage(zebraImage, 0, 0, width, height, false); 
    } 
    finally { 
     if(connection != null) 
      connection.close(); 
    } 
} 

** Modifier Sur la Qln420 l'image ne sont jamais stockées. Je m'attends à ce qu'il apparaisse à "E: sigfile.pcx" après avoir appelé storeImage() mais il ne sauve jamais. Je ne sais pas pourquoi.

+0

Quelle est la langue de? Utilisez la commande suivante avec l'imprimante:! U1 getvar "device.languages" – banno

+0

Où avez-vous obtenu le QLn520 qui est un nouveau modèle pour moi ... – banno

+0

Mistype sur la partie de quelqu'un. Je ne sais pas ce que l'autre modèle est en ce moment. Il y a QL420 et peut-être un 320. – jchristof

Répondre

2

Le correctif pour nous était de définir explicitement la langue de l'imprimante lors de la création d'une nouvelle imprimante pour stocker l'image:

public void storeImage(String printerFullPath, ZebraImageI zebraImage, int width, int height, PrinterLanguage printerLanguage) throws ConnectionException, ZebraPrinterLanguageUnknownException, IOException, ZebraIllegalArgumentException { 
    Connection connection = null; 
    try { 
     connection = ConnectionBuilder.build(connectionString); 
     connection.open(); 

     ZebraPrinter printer = ZebraPrinterFactory.getInstance(printerLanguage, connection); 

     printer.storeImage(printerFullPath, zebraImage, width, height); 

    } 
    finally { 
     if(connection != null) 
      connection.close(); 
    } 
} 

, nous avons également constaté que la suppression de l'extension du fichier de l'image a été utile pour un appareil si nous enlevons l'extension de fichier dans tous les cas maintenant. Pour nous, l'impression d'un reçu au format CPCL avec une image en ligne fonctionne sur P4T, QLn420 et ZQ520.

En outre, nous avons constaté que la mise à l'échelle de l'image avant de la stocker est également nécessaire car une grande banque d'images échouera sans émettre d'exception.

ZebraImageI zebraImage = ZebraImageFactory.getImage(BitmapFactory.decodeFile(file.getAbsolutePath())); 
    double scaleFactor = (printedImageWidth == null) ? 1.0 : (double)printedImageWidth/zebraImage.getWidth(); 
    //strip off the extension 
    String fileName = file.getName().split("\\.")[0]; 
    devicePrinter.storeImage(fileName, zebraImage, (int)(zebraImage.getWidth() * scaleFactor), (int)(zebraImage.getHeight() * scaleFactor), printerLanguage);