使用VC++将Postscript文档发送到打印机

cho*_*wey 2 printing postscript visual-c++

我有一个postscript文件.如何使用Visual C++将其发送到打印机?这似乎应该很简单.

Ton*_*mbe 7

如果打印机直接支持PostScript,您可以将原始打印作业假脱机,如下所示:

HANDLE ph;

OpenPrinter(&ph, "Printer Name", NULL);

di1.pDatatype = IsV4Driver("Printer Name") ? "XPS_PASS" : "RAW"; 
di1.pDocName = "Raw print document";
di1.pOutputFile = NULL;

StartDocPrinter(ph, 1, (LPBYTE)&di1);

StartPagePrinter(ph);

WritePrinter(ph, buffer, dwRead, &dwWritten);

EndPagePrinter(ph);

EndDocPrinter(ph)
Run Code Online (Sandbox Code Playgroud)

重复WritePrinter,直到假脱机整个文件.

IsV4Driver()检查版本4驱动程序,这在Windows 8和Server 2012中是必需的:

bool IsV4Driver(wchar_t* printerName)
{
    HANDLE handle;
    PRINTER_DEFAULTS defaults;

    defaults.DesiredAccess = PRINTER_ACCESS_USE;
    defaults.pDatatype = L"RAW";
    defaults.pDevMode = NULL;

    if (::OpenPrinter(printerName, &handle, &defaults) == 0)
    {
        return false;
    }

    DWORD version = GetVersion(handle);

    ClosePrinter(handle);

    return version == 4;
}

DWORD GetVersion(HANDLE handle)
{
    DWORD needed;

    GetPrinterDriver(handle, NULL, 2, NULL, 0, &needed);

    std::vector<char> buffer(needed);

    return ((DRIVER_INFO_2*) &buffer[0])->cVersion;
}
Run Code Online (Sandbox Code Playgroud)