ups

package module
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 27, 2021 License: MIT Imports: 28 Imported by: 0

README

UPS - Uncommon Printing System

a simple printing system for labels

Build Status GoDoc

I wrote the Uncommon Printing System a long time ago to replace a proprietary printing system called NiceWatch by NiceLabel. Don't get me wrong, Nice Label Designer is still the best WYSIWYG Label Editor on Earth, but NiceWatch is slow and unstable. The UPS is programmed to support Label Templates designed with NiceLabel Designer and print them on ZPL compatible printers.

This repository contains a refactored version of UPS. It only contains general purpose features, features like:

  • handling invalid XML-Files from SAP systems
  • reload missing data in XML-Files from SAP systems
  • save log-data to a BI (business intelligence) system
  • transfer material master data to a sub-system
  • load printer data from a SAP database table

are not included.

I use UPS in a customized version to print up to 10000 labels daily. UPS can also do a lot more with ease, but in the current case of application it is not needed. You can even run UPS on a Raspberry Pi.

Currently I only print on Zebra ZM400, Zebra ZT410, Zebra QL 420 (plus) and Zebra QLn 420, but I plan to extend the UPS to support non ZPL printers as well.

Test it

to test the application you can simply follow these steps:

  1. go get simonwaldherr.de/go/ups/cmd/ups
  2. ups &
  3. nc -l 9100 > zpl &
  4. cat xmlreq.xml | nc localhost 30000
  5. kill -9 $(pidof ups)

Why

Why what? Why I wrote the application? Because I did not want to bother anymore with an unstable proprietary software! I wasted several hours a week managing the NiceWatch system and keeping it running. I had much better things to do and that's why I wrote UPS.

Why I made some choices the way I made them? Mostly there is also a reasonable cause - you want an example? There is a function called cdatafy which adds CDATA-sections to the XML-string. You may ask why on earth someone would need such a function. Because many SAP developers don't know anything about XML in general and XML marshalling in specific, so they just concatenate strings and as result they create invalid XMLs. It seems like the favorite word of most SAP consultants is standard, but when it comes to actual W3C, WHATWG, IETF, ISO, … standards, they do not care.

But

If you only need a tool to print images on a Label-printer you can use this tool: SimonWaldherr/zplgfa - GitHub

Is it any good?

Yes

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Info    *log.Logger
	Warning *log.Logger
	Error   *log.Logger
)
View Source
var Hub = &Connections{
	clients:      make(map[chan LogMsg]bool),
	addClient:    make(chan (chan LogMsg)),
	removeClient: make(chan (chan LogMsg)),
	messages:     make(chan LogMsg),
}
View Source
var Labels []string
View Source
var Ltemplate = make(map[string]string)

Functions

func HttpPostRequest

func HttpPostRequest(url, msgbody string) (string, error)

func InitHTTP

func InitHTTP()

func InitTelnet

func InitTelnet()

func LogInit

func LogInit(
	infoHandle io.Writer,
	warningHandle io.Writer,
	errorHandle io.Writer)

func ParseLabels

func ParseLabels(labeldir string) ([]string, map[string]string)

func PrintMessages

func PrintMessages()

func PrinterType

func PrinterType(str string) string

Types

type Connections

type Connections struct {
	// contains filtered or unexported fields
}

func (*Connections) Init

func (hub *Connections) Init()

type Device

type Device struct {
	Mandt string
	Name  string
	IP    string
	Port  string
	Info  string
	DPI   int
	Peel  bool
}

type Devices

type Devices struct {
	Devs map[string]*Device
}
var Printer *Devices

func CreateDeviceMap

func CreateDeviceMap() *Devices

func LoadPrinter

func LoadPrinter(filename string) *Devices

func (*Devices) Set

func (devices *Devices) Set(Mandant, Name, IP, Port, Info string, DPI int, PeelOff bool)
type Head struct {
	Label   string
	Printer string
	Count   string
}

type LogMsg

type LogMsg struct {
	Date    string
	Str     string
	Msgtype string
	Dst     string
	Ip      string
	Label   string
	Weight  string
}

type Variables

type Variables struct {
	Head Head
	Data classAccessesMap `xml:"Data"`
}

func ParseDocumentXML

func ParseDocumentXML(xmlString string) Variables

Directories

Path Synopsis
cmd
ups

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL