GithubHelp home page GithubHelp logo

receiptprinter.c's Introduction

Printer.c

C code that converts one byte stream into other depending on printer driver.

Current implementations:

  • ZPL (Zebra)
  • ESCPOS (Epson)
  • BlueBamboo
  • Text (for testing ?)

Also includes bytebuf (modified)

Example

Objective-C

printer_t *printer;

- (void)dealloc {
    // dealloc streams
    
    if (printer) {
        printer_free(printer);
        printer = NULL;
    }
}

- (void)initPrinter {
    
    if (!printer) {
        printer = printer_new(self.printerType);
    }
    
    if (printer) {
        if (self.charactersPerLine > 0) {
            printer->data.characters_per_line = self.charactersPerLine;
        }
        if (self.dotsPerLine > 0) {
            printer->data.dots_per_line = self.dotsPerLine;
        }
        
        printer_init(printer);
    }
}

- (void)addImage:(UIImage *)image {
    CGSize size = image.size;
    int contentWidth = printer_content_width(printer);
    float scale = 1.0;
    
    // make sure the image fits on the receipt
    if (size.width > contentWidth) {
        scale = contentWidth / size.width;
        scale = MIN(1.0f, scale); // never increase size
        size = CGSizeMake( (NSInteger)(size.width * scale), (NSInteger)(size.height * scale) );
    }
    
    NSData *data = [image generateMonochromeBitmapAtSize:size];
    printer_add_image_data(printer, data.bytes, data.length, size.width, size.height);
}

- (void)addReceiptLines:(NSArray*)lines {
	// for loop
	printer_add_line_key_value(printer,
                                       (char *)line.name.UTF8String,
                                       (char *)line.value.UTF8String,
                                       (int)markup);
}

- (void)renderReceipt {

    printer_content_begin(printer);
    
    if (self.receiptLogo) {
        [self addImage:self.receiptLogo];
    }
    
    [self addReceiptLines:receipt.header];
    [self addReceiptLines:receipt.content];
    [self addReceiptLines:receipt.footer];
    
    printer_content_end(printer);
    printer_print(printer);
}

- (void)streamHasSpaceAvailable {
    if (printer == NULL) {
        return;
    }
    
    if (printer_state_finished(printer)) {
        [self printFinishedWithError:nil];
        return;
    }
    
    if (printer_state_ready(printer)) {
        [self renderReceipt];
    }
    
    // Printer wants something to say?
    int len = 0;
    char *bytes = printer_output_bytes(printer, &len);
    
    if (bytes && len > 0) {
        [_outputStream write:(void *)bytes maxLength:len];
    }
    
    if (printer_state_finished(printer)) {
        [self printFinishedWithError:nil];
        return;
    }
}

receiptprinter.c's People

Contributors

oleg-at-adyen avatar xslim avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.