Question

I'm trying to use the Link-OS SDK to send images to a Zebra iMZ320 printer using the GraphicsUtil class in XCode for iOS.

-(void)printImage:(UIImage *)image{

    NSString *serialNumber = @"";
    EAAccessoryManager *sam = [EAAccessoryManager sharedAccessoryManager];
    NSArray * connectedAccessories = [sam connectedAccessories];
    for (EAAccessory *accessory in connectedAccessories) {
        if([accessory.protocolStrings indexOfObject:@"com.zebra.rawport"] != NSNotFound){
            serialNumber = accessory.serialNumber;
            break;
        }
    }
    self.connection = [[MfiBtPrinterConnection alloc] initWithSerialNumber:serialNumber];
    NSError *error = nil;

    BOOL success = [self.connection open];

    self.printer = [ZebraPrinterFactory getInstance:self.connection error:&error];

    //Set the device language to zpl or the image prints its HEX value
    [SGD SET:@"device.languages" withValue:@"zpl" andWithPrinterConnection:self.connection error:&error];

    id<GraphicsUtil, NSObject> graphicsUtil = [self.printer getGraphicsUtil];

    success = [graphicsUtil printImage:[image CGImage] atX:0 atY:0 withWidth:200 withHeight:200 andIsInsideFormat:NO error:&error];


}

The image prints correctly but the printer feeds about 9 inches of blank paper before printing the image. I tried to set the "media.tof" var to 0 and tried to send the SETFF 50 2 command, with no luck. Any hints ? Thanks!

Was it helpful?

Solution

This is generally a Zebra printer configuration issue. Zebra printers can be set to either continuous mode (for printing receipts) or label mode (for printing labels). Furthermore, when set to label mode, the printer could be looking for a black bar to separate labels OR a gap in between the labels. So, the most important question is: what type of media are you using?

Continuous 'receipt' paper -

If you are using continuous paper, you will want to set the label length of your print job ahead of time. You will also want to indicate that you are using continuous media. You can send these commands to do so:

! U1 setvar "ezpl.media_type" "continuous"
! U1 setvar "zpl.label_length" "500"

Labels with black bars in between -

If you are using black bar labels, you need to send this SGD commands to the printer:

! U1 setvar "ezpl.media_type" "mark"

Labels with gaps in between -

If you are using labels with gaps in between, the following SGD command needs to be sent:

! U1 setvar "ezpl.media_type" "gap/notch"

(Notice the commands above are in ! U1 SGD notation. You can simply use the SDK 'SGD' calls as you see in your code to accomplish the same effect)

OTHER TIPS

I can't comment but i have to add this here. As to the best of my knowledge the accepted answer is not a parameter that is saved in the printer. It will reset every time you power cycle the printer.

To have the above method working you need to send the setvar command each time you poweron and connect to your printer or it will be reset.

This is at least found to be true with Zebra iMZ220 running firmware V73.19.13Z (Currently the latest version).

I also noted that you can configure the media type with the Zebra Config Utility (v1.1.9.1122). Here under "Configure printer settings" you can set Journal/Black Mark/Gap sense. You can also setup the feed length after printing. BUT if you save the file and send it to the printer and have a look at the config file there are no config for the media type or feed length in there.

Zebra support has not yet been able to recognize they have a problem or point to a solution. :/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top