package main import ( "bufio" "fmt" "net" "os" "strings" "time" "github.com/johnfercher/maroto/pkg/consts" "github.com/johnfercher/maroto/pkg/pdf" "github.com/johnfercher/maroto/pkg/props" ) var output string var lastData = time.Now() func main() { arguments := os.Args if len(arguments) == 1 { fmt.Println("Please provide host:port.") return } CONNECT := arguments[1] c, err := net.Dial("tcp", CONNECT) if err != nil { fmt.Println(err) return } go printWhenDone() scanner := bufio.NewScanner(c) for scanner.Scan() { // Pages are separated via \f or line feed //fmt.Println(scanner.Text()) output += fmt.Sprintf("%+v\n", scanner.Text()) lastData = time.Now() } } func printWhenDone() { for { if time.Since(lastData) > 5*time.Second && output != "" { makePdf() } time.Sleep(2 * time.Second) } } func delete_empty (s []string) []string { var r []string for _, str := range s { if str != "" { r = append(r, str) } } return r } func makePdf() { o := output output = "" outfile := "nil" m := pdf.NewMaroto(consts.Landscape, consts.Letter) scanner := bufio.NewScanner(strings.NewReader(o)) format := props.Text{ Size: 9, Family: consts.Courier, Top: 0, } firstRun := true for scanner.Scan() { line := scanner.Text() if strings.HasPrefix(line, "****A") && strings.Contains(line, "START") { parts := strings.Split(line, " ") parts = delete_empty(parts) var jobname, timestamp string for i, part := range parts { if len(part) == 0 { continue } if i == 2 { if parts[2] == "JOB" { jobname = parts[4] } else { jobname = fmt.Sprintf("%+v%+v", parts[4], parts[2]) } } if len(part) > 12 { ts, err := time.Parse("03.04.05 PM 02 Jan 06", strings.Trim(part, " ")) if err != nil { continue } timestamp = ts.Format("2006-01-02_15-04-05") break } } outfile = fmt.Sprintf("%+v-JOB_%+v", timestamp, jobname) } page := m.GetCurrentPage() if strings.HasPrefix(line, "\f") && !firstRun { for { if m.GetCurrentPage() != page { break } m.Row(3, func() { m.Col(10, func() { m.Text("\n", format) }) }) } } firstRun = false m.Row(3, func() { m.Col(12, func() { m.Text(line, format) }) }) } err := m.OutputFileAndClose(fmt.Sprintf("%+v.pdf", outfile)) if err != nil { fmt.Printf("Error closing pdf\n") return } }