我正在使用 windows spooler API 来打印一张简单的图片。在“文本”模式下,我的打印机将图片打印为文本,就像将其数据转换为字符一样。所以我必须使用“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