通过 Winspool 打印
Printing via Winspool
我正在尝试为网站设置一种打印服务,以便与 (pdf、html、excel) 通信并向其发送可打印文档。我决定使用 Go。
我创建了下面的简单程序。在某些 PC 上它可以工作 (Windows 7),在其他 PC 上 (Windows 8) 它不起作用(正确)。当它不起作用时,作业在打印队列中显示不到一秒钟,然后消失。该代码不输出任何错误。我在 Windows 事件日志中找不到任何内容。
我还尝试了一个可以在网上找到的 C++ 中的 RawPrinter 示例,但它显示了相同的行为。
有谁知道我做错了什么? :(
package main
import (
"fmt"
"code.google.com/p/brainman/printer"
)
func main() {
defaultPrinterName, _ := printer.Default()
fmt.Println(defaultPrinterName)
p, err := printer.Open(defaultPrinterName)
if err != nil {
fmt.Println("Open failed: %v", err)
}
defer p.Close()
err = p.StartDocument("my document", "RAW")
if err != nil {
fmt.Println("StartDocument failed: %v", err)
}
defer p.EndDocument()
err = p.StartPage()
if err != nil {
fmt.Println("StartPage failed: %v", err)
}
str := "testing 123"
mySlice := []byte(str)
_, err = p.Write(mySlice)
if err != nil {
fmt.Println("Write failed: %v", err)
}
err = p.EndPage()
if err != nil {
fmt.Println("EndPage failed: %v", err)
}
}
您使用的数据类型 "RAW",它应该是 "XPS_PASS"。
Windows 8(和 Server 2012)使用基于 XPS 的驱动程序,因此您不能使用 RAW 标志。
查看这些文章:
http://support.microsoft.com/kb/2779300
http://msdn.microsoft.com/en-us/library/windows/desktop/ff686812%28v=vs.85%29.aspx
我正在尝试为网站设置一种打印服务,以便与 (pdf、html、excel) 通信并向其发送可打印文档。我决定使用 Go。
我创建了下面的简单程序。在某些 PC 上它可以工作 (Windows 7),在其他 PC 上 (Windows 8) 它不起作用(正确)。当它不起作用时,作业在打印队列中显示不到一秒钟,然后消失。该代码不输出任何错误。我在 Windows 事件日志中找不到任何内容。
我还尝试了一个可以在网上找到的 C++ 中的 RawPrinter 示例,但它显示了相同的行为。
有谁知道我做错了什么? :(
package main
import (
"fmt"
"code.google.com/p/brainman/printer"
)
func main() {
defaultPrinterName, _ := printer.Default()
fmt.Println(defaultPrinterName)
p, err := printer.Open(defaultPrinterName)
if err != nil {
fmt.Println("Open failed: %v", err)
}
defer p.Close()
err = p.StartDocument("my document", "RAW")
if err != nil {
fmt.Println("StartDocument failed: %v", err)
}
defer p.EndDocument()
err = p.StartPage()
if err != nil {
fmt.Println("StartPage failed: %v", err)
}
str := "testing 123"
mySlice := []byte(str)
_, err = p.Write(mySlice)
if err != nil {
fmt.Println("Write failed: %v", err)
}
err = p.EndPage()
if err != nil {
fmt.Println("EndPage failed: %v", err)
}
}
您使用的数据类型 "RAW",它应该是 "XPS_PASS"。
Windows 8(和 Server 2012)使用基于 XPS 的驱动程序,因此您不能使用 RAW 标志。
查看这些文章: http://support.microsoft.com/kb/2779300 http://msdn.microsoft.com/en-us/library/windows/desktop/ff686812%28v=vs.85%29.aspx