fix html to png

This commit is contained in:
2026-04-08 15:31:23 +06:30
parent 016cc5b6fe
commit ecb03c1fb7
12 changed files with 694 additions and 163 deletions

View File

@@ -1,4 +1,4 @@
package main
package libgofunc
import (
/*
@@ -17,12 +17,33 @@ import (
"github.com/kenshaw/escpos"
)
import (
"fmt"
"github.com/google/gousb"
)
type USBReadWriter struct {
out *gousb.OutEndpoint
in *gousb.InEndpoint // Optional, can be nil if you only write
}
func (urw *USBReadWriter) Write(p []byte) (n int, err error) {
return urw.out.Write(p)
}
func (urw *USBReadWriter) Read(p []byte) (n int, err error) {
if urw.in == nil {
return 0, fmt.Errorf("read not supported")
}
return urw.in.Read(p)
}
//export PrintImg
func PrintImg(printer *C.char, imagePath *C.char) *C.char {
goPrinter := C.GoString(printer)
goImagePath := C.GoString(imagePath)
var out *gousb.OutEndpoint
// printer := "tcp:192.168.100.151:9100"
// printer := "usb:/dev/usb/lp1"
var w *bufio.ReadWriter
@@ -44,6 +65,40 @@ func PrintImg(printer *C.char, imagePath *C.char) *C.char {
}
defer f.Close()
w = bufio.NewReadWriter(bufio.NewReader(f), bufio.NewWriter(f))
} else if strings.HasPrefix(goPrinter, "int:") {
ctx := gousb.NewContext()
// location := strings.TrimLeft(goPrinter, "int:")
targetBus := 1
targetAddr := 5
devs, err := ctx.OpenDevices(func(desc *gousb.DeviceDesc) bool {
return int(desc.Bus) == targetBus && int(desc.Address) == targetAddr
})
if err != nil || len(devs) == 0 {
log.Fatal("Could not find or open the device")
}
dev := devs[0]
defer dev.Close()
dev.SetAutoDetach(true)
// 2. Claim the default interface (usually 0 for printers)
// Note: This may require detaching the kernel driver on Linux
intf, done, err := dev.DefaultInterface()
if err != nil {
log.Fatalf("Failed to claim interface: %v", err)
}
defer done()
// 3. Open the Bulk Output Endpoint (usually endpoint #1 or #2)
// You may need to inspect desc.Endpoints to find the correct Bulk Out ID
out, err = intf.OutEndpoint(1)
if err != nil {
log.Fatalf("Failed to open OUT endpoint: %v", err)
}
// w = bufio.NewReadWriter(bufio.NewReader(outPort), bufio.NewWriter(f))
rw := &USBReadWriter{out: out}
reader := bufio.NewReader(rw)
writer := bufio.NewWriter(rw)
w = bufio.NewReadWriter(reader, writer)
}
prt := escpos.New(w)
@@ -59,3 +114,9 @@ func PrintImg(printer *C.char, imagePath *C.char) *C.char {
time.Sleep(100 * time.Millisecond)
return NewOk(nil)
}
func Print(printer, imagePath string) string {
result := PrintImg(C.CString(printer), C.CString(imagePath))
r := C.GoString(result)
return r
}