Thu, 24 Sep 2009 17:18:28 +0100
Added support for separator ticks between labels
philpem@3 | 1 | /************************** |
philpem@3 | 2 | * P-Touch PT-2450DX printer driver |
philpem@3 | 3 | * |
philpem@3 | 4 | * P. Pemberton, 2009 |
philpem@3 | 5 | * |
philpem@3 | 6 | * Specs: |
philpem@3 | 7 | * Printer head is 128 dots, 180dpi, for a total print area of ~18mm vertical |
philpem@3 | 8 | * by however long your TZ label tape is. |
philpem@3 | 9 | * Printhead size is (128/180)=0.711[.] inches, or 18.0622[.] mm |
philpem@3 | 10 | * Each dot is (18.062/128) = 0.1411[.] mm |
philpem@3 | 11 | * Printable area is (numdots * 0.1411) mm |
philpem@3 | 12 | * |
philpem@3 | 13 | * Tape width Margins Printable area |
philpem@3 | 14 | * mm dots mm dots mm dots |
philpem@3 | 15 | * 6mm 42 1.0mm 7 4mm 28 |
philpem@3 | 16 | * 9mm 63 1.0mm 7 7mm 49 |
philpem@3 | 17 | * 12mm 85 2.0mm 14 8mm 57 |
philpem@3 | 18 | * 18mm 127 3.0mm 21 12mm 85 |
philpem@3 | 19 | * 24mm 170 3.0mm 128 18mm 128 *** |
philpem@3 | 20 | * |
philpem@3 | 21 | * 24mm is slightly odd. Because the printhead is only 128 dots (18mm), the |
philpem@3 | 22 | * margins are enforced by this, and not the driver software. It is impossible |
philpem@3 | 23 | * to print right to the edge of a 24mm label in a PT-2450DX. |
philpem@3 | 24 | * |
philpem@3 | 25 | **************************/ |
philpem@3 | 26 | |
philpem@0 | 27 | #include <stdio.h> |
philpem@0 | 28 | #include <stdlib.h> |
philpem@10 | 29 | #include <gd.h> |
philpem@10 | 30 | #include <gdfonts.h> |
philpem@10 | 31 | #include <gdfontl.h> |
philpem@3 | 32 | #include "ptouch.h" |
philpem@0 | 33 | |
philpem@3 | 34 | /****************************************************************************/ |
philpem@0 | 35 | |
philpem@0 | 36 | int main(int argc, char **argv) |
philpem@0 | 37 | { |
philpem@3 | 38 | pt_Device *dev; |
philpem@3 | 39 | |
philpem@0 | 40 | // check command line args |
philpem@0 | 41 | if (argc < 2) { |
philpem@0 | 42 | printf("ERROR: must specify device name\n"); |
philpem@0 | 43 | return -1; |
philpem@0 | 44 | } |
philpem@0 | 45 | |
philpem@3 | 46 | // Open and initialise the printer |
philpem@3 | 47 | dev = pt_Initialise(argv[1]); |
philpem@3 | 48 | |
philpem@3 | 49 | if (dev == NULL) { |
philpem@3 | 50 | printf("Error opening printer device.\n"); |
philpem@0 | 51 | return -1; |
philpem@0 | 52 | } |
philpem@0 | 53 | |
philpem@10 | 54 | // Get printer status |
philpem@10 | 55 | int err; |
philpem@10 | 56 | if ((err = pt_GetStatus(dev)) != PT_ERR_SUCCESS) { |
philpem@10 | 57 | printf("getstatus error %d\n", err); |
philpem@10 | 58 | return -1; |
philpem@10 | 59 | } |
philpem@10 | 60 | |
philpem@10 | 61 | // Create a label |
philpem@10 | 62 | gdImagePtr im; |
philpem@10 | 63 | int white, black; |
philpem@10 | 64 | im = gdImageCreate(256, dev->pixelWidth); |
philpem@10 | 65 | white = gdImageColorAllocate(im, 255, 255, 255); |
philpem@10 | 66 | black = gdImageColorAllocate(im, 0, 0, 0); |
philpem@10 | 67 | gdImageString(im, gdFontGetLarge(), 0, 0, "!!123!! Test label !!ABC!!", black); |
philpem@10 | 68 | gdImageString(im, gdFontGetLarge(), 10, 10, "!!123!! Test label !!ABC!!", black); |
philpem@10 | 69 | gdImageString(im, gdFontGetLarge(), 20, 20, "!!123!! Test label !!ABC!!", black); |
philpem@10 | 70 | gdImageString(im, gdFontGetLarge(), 30, 30, "!!123!! Test label !!ABC!!", black); |
philpem@10 | 71 | gdImageString(im, gdFontGetLarge(), 40, 40, "!!123!! Test label !!ABC!!", black); |
philpem@10 | 72 | |
philpem@10 | 73 | // dump the image (for testing purposes) |
philpem@10 | 74 | FILE *fp = fopen("labeldump.png", "wb"); |
philpem@10 | 75 | gdImagePng(im, fp); |
philpem@10 | 76 | fclose(fp); |
philpem@10 | 77 | |
philpem@16 | 78 | // Set job options |
philpem@16 | 79 | pt_SetOption(dev, PT_OPTION_AUTOCUT, 1); |
philpem@16 | 80 | pt_SetOption(dev, PT_OPTION_MIRROR, 1); |
philpem@19 | 81 | pt_SetOption(dev, PT_OPTION_SEPARATOR, 1); |
philpem@16 | 82 | |
philpem@10 | 83 | // Print the label |
philpem@10 | 84 | printf("Print state code: %d\n", pt_Print(dev, &im, 1)); |
philpem@10 | 85 | |
philpem@10 | 86 | gdImageDestroy(im); |
philpem@10 | 87 | |
philpem@3 | 88 | // Close the printer device |
philpem@3 | 89 | pt_Close(dev); |
philpem@0 | 90 | |
philpem@0 | 91 | return 0; |
philpem@0 | 92 | } |