C# 使用WritePrinter将原始数据发送到打印机
我正在尝试将原始字节发送到打印机。我试过各种各样的打印机,但似乎都没用C# 使用WritePrinter将原始数据发送到打印机,c#,c++,winapi,printing,C#,C++,Winapi,Printing,我正在尝试将原始字节发送到打印机。我试过各种各样的打印机,但似乎都没用OpenPrinter返回一个有效句柄,并且StartDocPrinter和StartPagePrinter都成功。即使是WritePrinter也会成功写入,写入的字节数与传入的字节数相同,并且打印作业会出现在后台打印程序窗口中。所有这些看起来都很成功,但仍然没有印刷出来 我知道将原始字节写入打印机实际上是特定于打印机的,所以我尝试打印到一个文件,并将这些文件的内容发送到WritePrinter。所有显示都很好,仍然没有打印
OpenPrinter
返回一个有效句柄,并且StartDocPrinter
和StartPagePrinter
都成功。即使是WritePrinter
也会成功写入,写入的字节数与传入的字节数相同,并且打印作业会出现在后台打印程序窗口中。所有这些看起来都很成功,但仍然没有印刷出来
我知道将原始字节写入打印机实际上是特定于打印机的,所以我尝试打印到一个文件,并将这些文件的内容发送到WritePrinter
。所有显示都很好,仍然没有打印输出。有什么不对劲吗?到目前为止,我找到的所有示例代码都与我所做的100%相同。代码如下:
if (OpenPrinter(printerName, &printer, NULL))
{
DOC_INFO_1 docInfo = {L"Print Job", NULL, L"RAW"};
DWORD printJob = StartDocPrinter(printer, 1, (LPBYTE) &docInfo);
if (printJob != 0)
{
if (StartPagePrinter(printer))
{
DWORD written = 0;
if (WritePrinter(printer, (LPVOID) (LPCSTR) str, str.GetLength(), &written))
{
}
EndPagePrinter(printer);
}
EndDocPrinter(printer);
}
ClosePrinter(printer);
}
[编辑]打印机:佳能iP4200代码没有明显错误。没有记录打印机品牌和型号是错误的。编辑问题。打印机为佳能iP4200。为什么现在就投票关闭?您需要用打印机能理解的语言在
str
中完整地传递打印机特定的配置信息……使用如此便宜的打印机可能不容易。@SixlettVariables:PRN不是有效的数据类型,除非打印机有自己的支持它的打印处理器。标准Windows数据类型的示例有RAW、TEXT、NT EMF 1.003等。prn只是“打印到文件”的默认文件扩展名。它不是数据类型。@wpfwanabe:转到打印机属性,高级选项卡,打印处理器。查看数据类型设置为什么。在docInfo结构中将您的设置为匹配。