winapi - 通过 Winspool 打印

标签 winapi windows-8 go print-spooler-api

我正在尝试为网站设置一种打印服务,以便与(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

关于winapi - 通过 Winspool 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27917857/

相关文章:

go - 我们可以在不构造 "manually"的情况下在数组和结构之间进行转换吗?

c++ - 在主 win32 窗口中创建窗口控制台

c# - 如何检测 Windows 是否要休眠或挂起?

go - 如何让 goroutines 使用匿名函数在循环中返回值

去教程: what is the & doing in this line?

f# - FSlex/FSyacc 崩溃 - 无法找到 FSharp.Core 程序集

c++ - 如何自定义监 window 口格式

通过家庭网络上两台机器之间的套接字连接?

windows-8 - Windows Phone 8 和 Windows 8 平板电脑

windows-8 - 有没有 WinRT iCommand/CommandBinding 实现示例?