软件环境xp + vc++ 6.0
打印机,EPSON-1600K
打印的纸张是连续的,纸张边缘带针孔的那种打印的格式为自定义,只有1~3行数据,但是打印完成后,纸张会自动走完整的一页,大部分纸都空白浪费掉了,
想实现的目标是: 打印完数据后, 控制打印机走纸, 只让带字的一小段纸张出来,而不是整一张纸都出来,请问如何用mfc控制打印机的走纸?

解决方案 »

  1.   

    目前的代码如下, 执行后, 打印机会走一张完整的纸
    /C++CPrintDialog dlg(FALSE,PD_NOPAGENUMS|PD_COLLATE,this); if(dlg.DoModal() == IDOK)
    {
    CDC dc;
    dc.Attach(dlg.GetPrinterDC());
    DOCINFO di; 
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "SimplePrintDoc";
    di.lpszOutput = NULL;
    di.lpszDatatype = NULL;
    di.fwType = 0;
    dc.StartDoc(&di); 
    dc.StartPage();
    dc.SetMapMode(MM_HIENGLISH);

    CRect rectPrint(0, 0,
    dc.GetDeviceCaps(HORZRES),
    dc.GetDeviceCaps(VERTRES));
    dc.DPtoLP(&rectPrint);
    dc.SetWindowOrg(-150, -rectPrint.bottom);//dc.SetWindowOrg(-2150, -rectPrint.bottom);
    CFont font;
    VERIFY(font.CreatePointFont(120, "宋体", &dc));//VERIFY(font.CreatePointFont(120, "Arial", &dc));
    CFont* def_font = dc.SelectObject(&font);
    dc.SetTextAlign(TA_TOP|TA_LEFT); CString toPrintStringTemp = toPrintStringAll; 
    toPrintStringTemp += "\n";  CString ss;
    int index;
    CSize size;
    int x = 300;//300;
    int y = 9000;//9000;
    size = dc.GetTextExtent("00", 2);

    while((index = toPrintStringTemp.Find("\n")) != -1)
    {
    ss = toPrintStringTemp.Left(index);
    if(ss.Find("\r") != -1)
    ss = toPrintStringTemp.Left(index-1);
    toPrintStringTemp = toPrintStringTemp.Mid(index+1);
    dc.TextOut(x, y, ss);
    y -= size.cy;
    }
    //dc.TextOut(x, y, ss);
    dc.SelectObject(def_font); 
    font.DeleteObject(); 
    dc.EndPage(); 
    dc.EndDoc();
    DeleteDC(dc.Detach()); 
    }
      

  2.   

    打印之前设置一下page size不知可不可以
      

  3.   


    能不能具体的说下? 那个函数是page size?
      

  4.   

    貌似有头绪了,http://hi.baidu.com/godtiantian/blog/item/53a68a19ae0a984142a9ada2.html
    一下,明天接上打印机试验一下