blitzer-v2/printer/main.go
2025-08-11 16:05:15 +01:00

75 lines
2 KiB
Go

package printer
import (
"fmt"
"image"
_ "image/jpeg"
"log"
"net"
"os"
"git.ctdo.de/henne/blitzer-v2/config"
"git.ctdo.de/henne/blitzer-v2/db"
"github.com/hennedo/escpos"
)
var whyImage image.Image
func init() {
if config.C.PrinterPort == "" {
return
}
imageFile, err := os.Open("webserver/assets/img/traffic_police.jpg")
if err != nil {
log.Printf("error loading image: %s", err)
}
whyImage, _, err = image.Decode(imageFile)
if err != nil {
log.Printf("image decoding error: %s", err)
}
}
func PrintTicket(ticket db.SpeedingTicket) {
if config.C.PrinterPort == "" {
return
}
socket, err := net.Dial("tcp", config.C.PrinterPort)
if err != nil {
log.Printf("printer error serial port: %s", err)
}
printer := escpos.New(socket)
printer.Initialize()
//printer.PrintImage(whyImage)
printer.Justify(escpos.JustifyCenter)
printer.Bold(true).Size(2, 2).Write("WHY Traffic Police")
printer.LineFeed()
printer.LineFeed()
printer.Bold(false).Size(1, 1).WriteWEU("Traffic Violation")
printer.LineFeed()
printer.LineFeed()
printer.Bold(false).Size(1, 1).WriteWEU("Dear being,")
printer.LineFeed()
time := ticket.CreatedAt
speed := ticket.Speed
limit := ticket.AllowedSpeed
printer.Bold(false).Size(1, 1).WriteWEU("we have found that you have violated")
printer.LineFeed()
printer.Bold(true).WriteWEU("WHY2025 traffic rules")
printer.LineFeed()
printer.Bold(false).WriteWEU(fmt.Sprintf("At %s on the %s", time.Format("15:04:05"), time.Format("02.01.2006")))
printer.LineFeed()
printer.WriteWEU("you exceeded the maximum allowed Speed of")
printer.LineFeed()
printer.WriteWEU(fmt.Sprintf("%dkm/h by %dkm/h", limit, speed-limit))
printer.LineFeed()
printer.WriteWEU(fmt.Sprintf("reaching a speed of %dkm/h", speed))
printer.LineFeed()
printer.QRCode("https://traffic.dre.li/ticket/"+ticket.ID.String(), true, 10, escpos.QRCodeErrorCorrectionLevelH)
printer.LineFeed()
printer.WriteWEU("find your ticket including proof online.")
printer.LineFeed()
printer.LineFeed()
printer.LineFeed()
printer.PrintAndCut()
}