使用Print Spooler API打印“原始”数据

时间:2013-09-20 22:50:32

标签: c++ printing

我正在使用Windows后台处理程序API来打印简单的图片。 在“TEXT”模式下,我的打印机将图片打印为文本,就像将数据转换为char一样。所以我要使用“RAW”模式,但在这种情况下没有任何附加内容 这是代码:

void camgl::printShoot() {
HANDLE print_handle;
DOC_INFO_1 docinfo1;
DWORD bytes_written;

docinfo1.pDocName = (LPTSTR)L"Shot.jpg";
docinfo1.pOutputFile = NULL;
docinfo1.pDatatype = (LPTSTR)L"RAW";

BOOL bool1, bool2, bool3, bool4;

bool1 = OpenPrinter((LPTSTR)L"Canon MG6300 series Printer", &print_handle, NULL);
bool2 = StartDocPrinter(print_handle, 1, (LPBYTE)&docinfo1);

bool3 = StartPagePrinter(print_handle);
bool4 = WritePrinter(print_handle, (LPVOID)image->imageData, (DWORD)image->imageSize, &bytes_written);
EndPagePrinter(print_handle);
EndDocPrinter(print_handle);

ClosePrinter(print_handle); 
}

变量“image”的定义如下:

  • IplImage *图片;

其中IplImage是OpenCV类型的图像。

我尝试向打印机发送换页字符,但没有成功:

int iFF = 0x0c;
WritePrinter(print_handle, (LPVOID)&iFF, (DWORD)sizeof(iFF), &bytes_written);

在这两种情况下,打印队列都会显示与printShoot()方法相对应的作业,然后清除队列时没有错误,打印机也不会打印任何内容。

==============

我添加这篇文章我刚刚发现:
http://www.codeproject.com/Articles/8916/Printing-Architecture

2 个答案:

答案 0 :(得分:0)

WritePrinter仅支持GDI打印。

打印JPEG图像需要更多代码。 如果紧急,您可以尝试调用命令行 MS Paint打印JPEG图像

C:\Windows\System32\mspaint.exe C:\image.jpg /p

答案 1 :(得分:0)