Zebra IMZ 320打印图像耗时太长(iOS)

时间:2014-01-31 15:56:08

标签: ios objective-c xcode printing zebra-printers

我使用Zebra IMZ 320从iOS打印pdf文件(实际收据)并且它有效。但我需要大约50秒才能打印出一张23 kb的pdf文档。

我想也许如果我以十六进制格式发送它,打印机会理解,打印时间会减少,但我找不到如何以字节格式发送它。我试图查看zpl代码,但从我的理解,它主要是将图像转换为.grf格式并使用实用程序将其发送到打印机,但我的图像是动态的。

任何人都可以帮我这个吗?

以下是我发送打印图像的代码:

CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)pdfData);
CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider);

    size_t nPages = CGPDFDocumentGetNumberOfPages(document);
    size_t pageNum;
    for (pageNum = 1; pageNum <= nPages; pageNum++) {

        UIImage* image = nil;

        CGPDFPageRef page = CGPDFDocumentGetPage(document, pageNum);

        CGRect rect = CGPDFPageGetBoxRect(page, kCGPDFArtBox);

        UIGraphicsBeginImageContextWithOptions(rect.size, YES, 2.6);

        CGContextRef context = UIGraphicsGetCurrentContext();

        CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
        const CGFloat fillColors[] = {1.0, 1.0, 1.0, 1.0};

        CGColorRef colorRef = CGColorCreate(rgb, fillColors);
        CGContextSetFillColorWithColor(context, colorRef);
        CGContextFillRect(context, rect);
        CGColorSpaceRelease(rgb);
        CGColorRelease(colorRef);

        CGContextTranslateCTM(context, 0.0, rect.size.height);

        CGContextScaleCTM(context, 1.0, -1.0);

        if (page != NULL)
        {
            CGContextSaveGState(context);

            CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, rect, 0, true);

            CGContextConcatCTM(context, pdfTransform);

            CGContextDrawPDFPage(context, page);

            CGContextRestoreGState(context);

            image = UIGraphicsGetImageFromCurrentImageContext();
        }

        UIGraphicsEndImageContext();

        if (nil != image) {
            NSError *error = nil;
            success = [graphicsUtil printImage:[image CGImage] atX:0 atY:0 withWidth:x withHeight:y
                             andIsInsideFormat:NO error:&error];
        }
    }

非常感谢

注意:是的,这是通过蓝牙

1 个答案:

答案 0 :(得分:0)

减少时间的一种方法是将收据的文本发送到打印机(使用打印机语言格式化),而不是发送PDF图像;这种方法可以大大减少必须通过蓝牙发送的字节数,通常低于1K。