This is an explanation on how to print barcode labels from Saleculator POS machine.
Saleculator, version 3.6 u9 onwards, support plug and play operation of barcode label printers. Saleculator communicate using ZPL or BPL printer languages.
Follow the below steps to setup label printer in Saleculator:
1. Calibrate printer by the help of printer documentation. After calibration, when you press feed button a single label should come out.
2. Connect printer to Saleculator. Now, in Saleculator, go to Configuration>Label Printer and choose printer: ZPL/BPL, mode: file, port: /dev/usb/lp0. If there is other printer already connected, identify the port by issuing command “ls /dev/usb”. Save configuration and press restart button on Saleculator login screen.
3. Go to Maintenance>Resource and create a resource called Printer.Label and add label format as explained below. By default Saleculator read label format from Printer.Label resource. Multiple label formats can be created and assigned to products by adding the below line in product properties. You should keep the key=”label”. Resource name be anything.
<entry key="label">Printer.LabelSmall</entry>
4. Go to Stock>Stock Maintenance and add an item to the movement list. Press Labels button for printing label. The number of copies is taken from the inventory quantity. Specific number of copies can be set in the text box above label button. Choose individual item from the movement list when there are multiple items.
XML Structure of a basic label:
<?xml version="1.0" encoding="UTF-8"?> <label> <text>$product.getName()</text> <barcode>$product.getCode()</barcode> <text>$product.printPriceSell()</text> </label>
XML Structure of a label with properties set:
<?xml version="1.0" encoding="UTF-8"?> <label> <text x="50" y="50" f>$product.getName()</text> <barcode x="50" y="100" type="EAN8" >$product.getCode()</barcode> <text x="50" y="150" f>Rs.$product.printPriceSell()</text> <text x="50" y="250" f>SALE Rs.$line.printSubValue()</text> </label>
Below is the detailed information on different label element properties.
<label> properties:
width = label width in inches or mm (“2”, “20 mm”,..). This property is not required for ZPL.
height = label height (“1.5”, “15 mm”, ..). In ZPL, this property is used only when gap is set “0” for continuous label.
gap = gap between two labels (“0.01″, ” mm”,..). Use “0” for continuous labels without gap.
direction = print out direction (“N” or “I”)
<text> properties:
x = x coordinate of the text position
y = y coordinate of the text position
font = font style (ZPL: “A” through “Z”, and “0” to “9”. BPL: “0” to “8”)
width = character width
height = character height
rotation = rotation angle of text (“N”: normal, “R”: 90 degrees, “I”: 180 degrees, “B”: 270 degrees)
<barcode> properties:
x = x coordinate of the barcode position
y = y coordinate of the barcode position
type = barcode type (CODE39, CODE128, EAN8, EAN13)
height = barcode height
readable = print human readable text below barcode (“Y” or “N”)
rotation = rotation angle of barcode (“N”: normal, “R”: 90 degrees, “I”: 180 degrees, “B”: 270 degrees)
narrow = width of narrow barcode element (1,2,..)
width = width of wide barcode element (1,2,..)
Below is a setting for zebra printer.
<?xml version="1.0" encoding="UTF-8"?> <label> #if($product.getName().length()>30) <text width="20" height="20" x="280" y="20">$product.getName().substring(0,30)</text> <text width="20" height="20" x="280" y="50">$product.getName().substring(31,$product.getName().length())</text> #else <text width="20" height="20" x="280" y="20">$product.getName()</text> #end <text width="35" height="35" x="370" y="80">$product.getCode()</text> <barcode x="320" y="110" type="CODE128" height="50" width="2" readable="N">$product.getCode()</barcode> <text width="30" height="30" x="280" y="170">OMR:$product.printPriceSell()</text> </label>