我日前在做一个打印交费发票的时候,因为发票就那么点长,可是打印机老是走很长的一段纸,我要控制打印机刚好走到下一张发票纸,就最好了,这个怎么控制,怎么向打印机发送指令,请教各位高手。

解决方案 »

  1.   

    用AssignFile(f,'lpt1')实现打印(向lpt1端口发送字符),
      

  2.   

    不用向打印机发指令,API中可以设定纸张的大小,
    我为财务用C++BUILDER编过一个打印连续小纸的程序,居然分毫不差地
    控制走纸分页。
      

  3.   

    void  SetPaperSize(int w,int h)   // 设置缺省打印机纸张大小 w*h(*0.1mm)
        {
           char Device[CCHDEVICENAME];
           char Driver[MAX_PATH];
           char Port[32];
           THandle   hDMode;
           PDevMode  pDMode;       TPrinter *Prn = Printer();
           Prn->GetPrinter(Device,Driver,Port,hDMode);
           if (hDMode!=NULL)
              {
                 pDMode=(PDevMode)GlobalLock((HGLOBAL &)hDMode);
                 if (pDMode!=NULL)
                    {
                      pDMode->dmPaperSize= 256;
                      pDMode->dmFields=pDMode->dmFields | DM_PAPERSIZE;
                      pDMode->dmPaperLength =h;   //高 *0.1mm
                      pDMode->dmFields =pDMode->dmFields| DM_PAPERLENGTH;
                      pDMode->dmPaperWidth = w;   //宽 *0.1mm
                      pDMode->dmFields =pDMode->dmFields| DM_PAPERWIDTH;
                    }
                ResetDC(Prn->Handle,pDMode);
                GlobalUnlock((HGLOBAL &)hDMode);
             }
       }
    //  不知怎样改成delphi
      

  4.   

    我是用小尺子量了财务纸张的大小,然后用上面的子程序
    设定缺省打印机的纸张,非常管用,此API程序是由BCB孙版
    主春阳提供的,
      

  5.   

    dos下比较简单,windows直接控制打印机好象违背了windows
    的初衷,打印机的型号千差万别
      

  6.   

    你的打印程序可能没有按照Windows的标准或要求去做的,
    否则换页问题根本就不算问题,因为它总是按照纸张设定
    的大小换页的
      

  7.   

    在windows下打印机工作在图象点阵方式,
    你要的是字符方式,要绕开windows了,
    DOS下是调用Bios的,现在已不能调用它了,
    把打印机当成“文件”试试,看写打印机文件行不行。打印机是有一套内部控制码的,但各个打印机的内部码肯定是不一样的,
    你是想回到上个世纪的DOS方式了,想当年每一套系统都要自已控制不
    同的打印机,够累的了。我觉得你是钻牛角尖,其实在windows下根本用不着你去
    控制换页,你只要设置纸张的大小,在这么大小的面积,写上你的字符
    就行了。