103 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"bytes" | ||
|  | 	"fmt" | ||
|  | 	"github.com/jung-kurt/gofpdf" | ||
|  | 	"log" | ||
|  | 	"net" | ||
|  | 	"os/exec" | ||
|  | 	"strings" | ||
|  | ) | ||
|  | 
 | ||
|  | func printPDF() { | ||
|  | 	cmd := exec.Command("powershell", "-ExecutionPolicy", "Bypass", "-File", "./print.ps1") | ||
|  | 	var out bytes.Buffer | ||
|  | 	var stderr bytes.Buffer | ||
|  | 	cmd.Stdout = &out | ||
|  | 	cmd.Stderr = &stderr | ||
|  | 
 | ||
|  | 	// 运行命令 | ||
|  | 	err := cmd.Run() | ||
|  | 	if err != nil { | ||
|  | 		fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) | ||
|  | 		return | ||
|  | 	} | ||
|  | 	fmt.Println("Output:", out.String()) | ||
|  | } | ||
|  | 
 | ||
|  | func generatePDF(num string) { | ||
|  | 	args := strings.Split(num, ",") | ||
|  | 	pdf := gofpdf.NewCustom(&gofpdf.InitType{ | ||
|  | 		OrientationStr: "P", | ||
|  | 		UnitStr:        "mm", | ||
|  | 		SizeStr:        "A4", | ||
|  | 		Size: gofpdf.SizeType{ | ||
|  | 			Wd: 80, | ||
|  | 			Ht: 100, | ||
|  | 		}, | ||
|  | 		FontDirStr: "", | ||
|  | 	}) | ||
|  | 	pdf.AddUTF8Font("simhei", "", "./simhei.ttf") | ||
|  | 
 | ||
|  | 	pdf.AddPage() | ||
|  | 	pdf.SetFont("simhei", "", 24) | ||
|  | 	pdf.SetXY(0, 0) | ||
|  | 	pdf.CellFormat(60, 50, args[0], "", 0, "C", false, 0, "") | ||
|  | 	pdf.SetFont("simhei", "", 100) | ||
|  | 	pdf.SetXY(0, 25) | ||
|  | 	pdf.CellFormat(60, 50, args[1], "", 0, "C", false, 0, "") | ||
|  | 	err := pdf.OutputFileAndClose("./test.pdf") | ||
|  | 	if err != nil { | ||
|  | 		log.Fatalf("Failed to save PDF: %v", err) | ||
|  | 	} | ||
|  | 	fmt.Println("generate pdf success") | ||
|  | } | ||
|  | 
 | ||
|  | func handleConnection(conn net.Conn) { | ||
|  | 	log.Printf("receive connection: %v", conn.RemoteAddr()) | ||
|  | 	defer func(conn net.Conn) { | ||
|  | 		err := conn.Close() | ||
|  | 		if err != nil { | ||
|  | 			log.Fatalln(err) | ||
|  | 		} | ||
|  | 	}(conn) | ||
|  | 
 | ||
|  | 	for { | ||
|  | 		buf := make([]byte, 1024) | ||
|  | 		n, err := conn.Read(buf) | ||
|  | 
 | ||
|  | 		if err != nil { | ||
|  | 			fmt.Println("服务器端的read err=", err) | ||
|  | 			return | ||
|  | 		} | ||
|  | 		generatePDF(string(buf[:n])) | ||
|  | 		printPDF() | ||
|  | 		fmt.Printf("onMessage %s \n", string(buf[:n])) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	listener, err := net.Listen("tcp", ":8080") | ||
|  | 	if err != nil { | ||
|  | 		log.Fatalf("Failed to start server: %v", err) | ||
|  | 	} | ||
|  | 	defer func(listener net.Listener) { | ||
|  | 		err := listener.Close() | ||
|  | 		if err != nil { | ||
|  | 			log.Fatalln(err) | ||
|  | 		} | ||
|  | 	}(listener) | ||
|  | 
 | ||
|  | 	log.Println("Server started on :8080") | ||
|  | 
 | ||
|  | 	for { | ||
|  | 		conn, err := listener.Accept() | ||
|  | 		if err != nil { | ||
|  | 			log.Printf("Failed to accept connection: %v", err) | ||
|  | 			continue | ||
|  | 		} | ||
|  | 		go handleConnection(conn) | ||
|  | 	} | ||
|  | } |