如何打印到实际打印机?

How can I print to an actual printer?

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

我如何在 Go 中实现它?我真的很难找到关于这个主题的任何东西。

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

我对如何处理这件事完全一无所知...有人可以为我阐明这一点并为我指明正确的方向吗?

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

这个方法请看Microsoft TechNet的资料。

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

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

使用@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