1

我正在使用 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

4

2 回答 2

0

WritePrinter 仅支持 GDI 打印。

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

C:\Windows\System32\mspaint.exe C:\image.jpg /p
于 2013-09-21T00:11:01.667 回答
0

我通过使用 XPS API 找到了一个解决方案,就像那里描述的那样:http:
//msdn.microsoft.com/en-us/library/windows/desktop/ff728890 (v=vs.85).aspx

那里有一个示例代码:http:
//msdn.microsoft.com/en-us/library/windows/desktop/ee236514 (v=vs.85).aspx

于 2013-09-21T16:47:34.800 回答