Go:如何打印到实际的打印机

时间:2015-04-07 12:04:55

标签: printing go

我有一个用Go编写的消息服务器。现在我要求服务器需要在纸上打印一些消息。

如何在Go中实现此功能?我很难找到关于这个主题的任何内容。

该应用程序将在Windows机器上运行,并且需要能够以固定宽度字体打印UTF8编码文本。所以不需要花哨的格式(粗体文字,颜色等)。

对于如何解决这个问题,我完全处于黑暗中......有人可以为我阐明这一点,并指出我正确的方向吗?

3 个答案:

答案 0 :(得分:4)

可以使用Go调用正确的命令行参数来打印所需的任何文件。您只需要先将此信息打印到文件中。

请参阅Microsoft TechNet有关此方法的信息。

我不太熟悉的另一种方法是使用Windows中的DLL通过Go来调用打印。我无法找到关于此的更多信息,但是Go documentation has some pretty good examples.

您可以查看几个方向! :)

答案 1 :(得分:4)

如果您不需要任何格式,可以使用github.com/alexbrainman/printer包。

亚历

答案 2 :(得分:4)

使用@abalos和@alex的答案,我能够按照我需要的方式使用它。回答这个问题以提供如何使用它的样本 - 使用alex的库非常简单:

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)
}

可以找到有关Windows API的更多详细信息here