2015-04-07 172 views
3

我有用Go編寫的消息服務器。現在我要求服務器在紙上打印一些消息。前往:我如何才能打印到實際打印機

如何在Go中執行此操作?我真的很難找到關於這個問題的任何事情。

該應用程序將在Windows機器上運行,需要能夠以固定寬度字體打印UTF8編碼文本。所以不需要花哨的格式(粗體文本,顏色等)。

我完全在黑暗中如何去解決這個問題......有人能爲我闡明這一點,並指出我在正確的方向嗎?

回答

3

可以使用Go調用正確的命令行參數來打印任何需要的文件。您只需要首先將這些信息打印到文件中。

請參閱此方法的信息Microsoft TechNet

我不太熟悉的另一種方法是通過Go使用DLL中的Go來調用打印。我無法找到儘可能多的信息,但這Go documentation has some pretty good examples.

有幾個方向,你可以看看! :)

1

使用從@abalos的答案,@alex我能得到這個工作,我需要它的方式。回答這個問題提供如何使用它的樣本 - 它通過Alex的圖書館是相當簡單:在Windows API

import prt "github.com/alexbrainman/printer" 

... 

name, err := prt.Default() // returns name of Default Printer as string 
if err != nil { 
    log.fatal(err) 
} 
p, err := prt.Open(name) // Opens the named printer and returns a *Printer 
if err != nil { 
    log.fatal(err) 
} 
err = p.StartDocument("test", "text") // test: doc name, text: doc type 
if err != nil { 
    log.fatal(err) 
} 
err = p.StartPage() // begin a new page 
if err != nil { 
    log.fatal(err) 
} 
n, err := p.Write([]byte("Hello, Printer!")) // Send some text to the printer 
if err != nil { 
    log.fatal(err) 
} 
fmt.Println("Num of bytes written to printer:", n) 
err = p.PageEnd() // end of page 
if err != nil { 
    log.fatal(err) 
} 
err = p.DocumentEnd() // end of document 
if err != nil { 
    log.fatal(err) 
} 
err = p.Close() // close the resource 
if err != nil { 
    log.fatal(err) 
} 

更多細節可以發現here