【发布时间】:2018-03-24 22:37:15
【问题描述】:
我从 Windows 服务在 Microsoft XPS Document Writer 上打印。打印完成良好(没有任何错误)。如果我再次在上面打印(甚至不是从服务中),它就不会打印。在打印队列上,我可以看到我的第一个打印作业(系统)状态为错误,其他作业阻止购买它。如何正确从服务打印? 我使用 CreateDC、StartDoc 等。
编辑:
void Print(const std::wstring& path)
{
...
HDC hdcMXDW = CreateDC(L"WINSPOOL", printerName.c_str(), NULL, NULL);
if (!hdcMXDW)
{
return;
}
DOCINFO docInfo = {
sizeof(DOCINFO),
L"emf_to_xps",
xpsName.c_str(),
NULL,
0
};
if (StartDoc(hdcMXDW, &docInfo) > 0)
{
if (StartPage(hdcMXDW) > 0)
{
...
EndPage(hdcMXDW);
}
EndDoc(hdcMXDW);
}
DeleteDC(hdcMXDW);
}
所有打印 Api 函数都返回良好的结果。
【问题讨论】:
-
你需要分享你已经实现的代码。
-
Microsoft 强烈反对从服务打印,并且不会接受有关它的支持电话。打印机驱动程序是具有许多可能的故障模式的代码块。因此,打印 API 只能报告功能失败,而不能报告原因。打印机驱动程序负责将故障本身通知用户。这不能在服务中工作,这样的通知永远不可见。不要这样做。
-
但是打印 Api 总是返回好的结果。