调用打印机打印问题

ren_fwei 2010-10-20 04:22:37
小弟在使用 WritePrinter函数向打印机发送数据时,打印机显示添加了一个新的任务,但是确没有打印出来,请各位高人给看下,代码如下:
bool CRPrinter::DPSendFiletoPrinter(LPCSTR pPrinterName, LPCSTR pFilePath)
{
DWORD tFileSize = 0;
DWORD tReadFileSize = 0;
DWORD size = 0;
char * tBuf = NULL;
HANDLE tPrinter = NULL;
DOC_INFO_1 tDocInfo1; // 打印文档信息

if(pPrinterName == NULL || pFilePath == NULL)
return false;

// 打开打印机
if(!OpenPrinter((LPSTR)pPrinterName,&tPrinter,NULL) || tPrinter == NULL){
return false;
}

memset(&tDocInfo1,0,sizeof(tDocInfo1));
tDocInfo1.pDocName = "my document"; // 文档名
tDocInfo1.pOutputFile = NULL;
tDocInfo1.pDatatype = "RAW"; // 数据以RAW格式发送(Win9x和WinNT都支持RAW和EMF格式,WinNT还支持TEXT格式


if(!StartDocPrinter(tPrinter, 1,(LPBYTE)&tDocInfo1)){
CloseHandle(tPrinter);
return false;
}

StartPagePrinter(tPrinter);

// 打开文件并获取文件大小
HANDLE tFile = CreateFile(pFilePath, GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if(tFile == INVALID_HANDLE_VALUE){
return false;
}
tFileSize = GetFileSize(tFile,NULL);
if(tFileSize == 0xFFFFFFFF){
CloseHandle(tFile);
CloseHandle(tPrinter);
return false;
}

while(tFileSize>0){
size = tFileSize<MAXPRINTSIZE?tFileSize:MAXPRINTSIZE;
tBuf = (char *)malloc(size);
if(tBuf == NULL){
CloseHandle(tFile);
CloseHandle(tPrinter);
return false;
}
memset(tBuf, 0x0, size);

// 读数据
tReadFileSize = 0;
if(!ReadFile(tFile,(LPVOID)tBuf,size,&tReadFileSize,NULL) || size != tReadFileSize){
CloseHandle(tFile);
CloseHandle(tPrinter);
free(tBuf);
return false;
}

// 写入打印机
tReadFileSize = 0;
if(!WritePrinter(tPrinter, tBuf, size, &tReadFileSize) || size != tReadFileSize){
free(tBuf);
CloseHandle(tFile);
CloseHandle(tPrinter);
return false;
}
free(tBuf);

tFileSize = tFileSize - size;
}

//关闭文件
CloseHandle(tFile);

//结束打印,关闭打印机
EndPagePrinter(tPrinter);
if(!EndDocPrinter(tPrinter)){
CloseHandle(tPrinter);
return false;
}
CloseHandle(tPrinter);

return true;
}

执行后打印机状态为已暂停,名为my document的文档没有打印,跪求各位大虾指点
...全文
231 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Veiky_c 2011-07-05
  • 打赏
  • 举报
回复
学到了~~要的就是流程啊啊啊~~~~
sterrys 2010-11-20
  • 打赏
  • 举报
回复
if(!StartDocPrinter(tPrinter, 1,(LPBYTE)&tDocInfo1)){
CloseHandle(tPrinter);
return false;
}
StartPagePrinter(tPrinter);

获取打印机DC
从要打印的文件读取数据
应用程序往打印机dc上绘制内容


guojinlei666 2010-11-11
  • 打赏
  • 举报
回复
我也有个类似的问题,没人给解决
guojinlei666 2010-11-11
  • 打赏
  • 举报
回复
为了挣点积分也得发啊
guojinlei666 2010-11-11
  • 打赏
  • 举报
回复
学习中,,好好看看
会思考的草 2010-11-02
  • 打赏
  • 举报
回复
直接往打印机里面写的话,要写入的内容必须是打印机能识别的东西。

通常情况下,打印流程是这样的:
获取打印机DC->
应用程序往打印机dc上绘制内容->
GDI将内容缓冲到spool file中,格式为emf或者raw->
打印机驱动(printer graphic dll)回放spool file中的图形,翻译成打印机作业语言(PCL,postscript)->
翻译后的结果发往port monitor->
port monitor写入打印机

要么,你自己生成打印机识别的数据格式(PCL, postscript)写入打印机;
要么你借助GDI和打印机驱动,将光栅图像转换成打印机数据,写入打印机。
数据集介绍:垃圾分类检测数据集 一、基础信息 数据集名称:垃圾分类检测数据集 图片数量: 训练集:2,817张图片 验证集:621张图片 测试集:317张图片 总计:3,755张图片 分类类别: - 金属:常见的金属垃圾材料。 - 纸板:纸板类垃圾,如包装盒等。 - 塑料:塑料类垃圾,如瓶子、容器等。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式为常见图像格式(如JPEG/PNG)。 二、适用场景 智能垃圾回收系统开发: 数据集支持目标检测任务,帮助构建能够自动识别和分类垃圾材料的AI模型,用于自动化废物分类和回收系统。 环境监测与废物管理: 集成至监控系统或机器人中,实时检测垃圾并分类,提升废物处理效率和环保水平。 学术研究与教育: 支持计算机视觉与环保领域的交叉研究,用于教学、实验和论文发表。 三、数据集优势 类别覆盖全面: 包含三种常见垃圾材料类别,覆盖日常生活中主要的可回收物类型,具有实际应用价值。 标注精准可靠: 采用YOLO标注格式,边界框定位精确,类别标签准确,便于模型直接训练和使用。 数据量适中合理: 训练集、验证集和测试集分布均衡,提供足够样本用于模型学习和评估。 任务适配性强: 标注兼容主流深度学习框架(如YOLO等),可直接用于目标检测任务,支持垃圾检测相关应用。

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧