行打印技术(Print  line  by  line),而不是按页打印(print  page  by  page),下面是代码。使用按行打印只能在支持连续纸的打印机上实现,激光的不行。
http://support.microsoft.com/support/kb/articles/Q175/0/83.asp
HOWTO:  Print  Line-by-Line  to  a  Printer  (Q175083)
--------------------------------------------------------------------------------
The  information  in  this  article  applies  to:
Microsoft  Visual  Basic  Learning  Edition  for  Windows,  versions  5.0  ,  6.0
Microsoft  Visual  Basic  Professional  Edition  for  Windows,  versions  5.0  ,  6.0
Microsoft  Visual  Basic  Enterprise  Edition  for  Windows,  versions  5.0  ,  6.0
Microsoft  Visual  Basic  Standard  Edition,  32-bit,  for  Windows,  version  4.0
Microsoft  Visual  Basic  Professional  Edition,  32-bit,  for  Windows,  version  4.0
Microsoft  Visual  Basic  Enterprise  Edition,  32-bit,  for  Windows,  version  4.0
--------------------------------------------------------------------------------
SUMMARY
Printing  page-by-page  is  the  Windows  standard;  however,  it  is  sometimes  desirable  to  print  to  a  printer  line-by-line  rather  than  page-by-page.  One  advantage  to  printing  line-by-line  is  that  if  there  is  a  power  failure  while  printing,  the  data  lost  is  one  log  item,  at  most.  The  Visual  Basic  Printer  object  does  not  support  this  mode,  but  the  Win32  API  accomplishes  this  handily.
more Information
This  technique  will  work  only  when  printing  to  a  local  line  printer,  typically  a  dot  matrix  printer.  Laser  and  Ink  Jet  printers  are  page  printers  and  will  not  print  in  single  line  mode.
Create  a  new  Visual  Basic  project  and  place  a  CommandButton  on  Form1.
Add  the  following  code  to  Form1:
            Option Explicit
            Private Type DOCINFO
                    pDocName  As String
                    pOutputFile  As String
                    pDatatype  As String
            End Type
            Private  Declare  Function  ClosePrinter  Lib  "winspool.drv"  (ByVal _
                  hPrinter  As  Long)  As  Long
            Private  Declare  Function  EndDocPrinter  Lib  "winspool.drv"  (ByVal _
                  hPrinter  As  Long)  As  Long
            Private  Declare  Function  EndPagePrinter  Lib  "winspool.drv"  (ByVal _
                  hPrinter  As  Long)  As  Long
            Private  Declare  Function  OpenPrinter  Lib  "winspool.drv"  Alias _
                  "OpenPrinterA"  (ByVal  pPrinterName  As  String,  phPrinter  As  Long, _
                    ByVal  pDefault  As  Long)  As  Long
            Private  Declare  Function  StartDocPrinter  Lib  "winspool.drv"  Alias _
                  "StartDocPrinterA"  (ByVal  hPrinter  As  Long,  ByVal  Level  As  Long, _
                  pDocInfo  As  DOCINFO)  As  Long
            Private  Declare  Function  StartPagePrinter  Lib  "winspool.drv"  (ByVal _
                  hPrinter  As  Long)  As  Long
            Private  Declare  Function  WritePrinter  Lib  "winspool.drv"  (ByVal _
                  hPrinter  As  Long,  pBuf  As  Any,  ByVal  cdBuf  As  Long, _
                  pcWritten  As  Long)  As  Long
            Dim lhPrinter   As Long
            Private Sub Command1_Click()
                          Dim lReturn   As Long
                          Dim lpcWritten   As Long
                          Dim sWrittenData   As String
                          sWrittenData = "How's  that  for  Magic  !!!!" & vbCrLf
                          lReturn  =  WritePrinter(lhPrinter,  ByVal  sWrittenData, _
                                Len(sWrittenData),  lpcWritten)
            End Sub
            Private Sub Form_Load()
                    Dim lReturn   As Long
                    Dim lDoc   As Long
                    Dim MyDocInfo   As DOCINFO
                    lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)
                    If lReturn = 0 Then
                            MsgBox "The  Printer  Name  you  typed  wasn't  recognized."
                            Exit Sub
                    End If
                    MyDocInfo.pDocName = "AAAAAA"
                    MyDocInfo.pOutputFile = vbNullString
                    MyDocInfo.pDatatype = vbNullString
                    lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
                    Call StartPagePrinter(lhPrinter)
            End Sub
            Private Sub Form_Unload(Cancel As Integer)
                    Dim lReturn   As Long
                    lReturn = EndPagePrinter(lhPrinter)
                    lReturn = EndDocPrinter(lhPrinter)
                    lReturn = ClosePrinter(lhPrinter)
            End Sub
Make  the  logging  printer  the  default  and  run  the  application.  Every  time  you  click  Command1,  a  line  should  be  immediately  printed  to  your  printer.
WARNING:  Pressing  the  End  button  on  the  toolbar  or  selecting  the  Run  /  End  menu  option  will  not  close  the  current  print  job  and  may  block  further  jobs  from  printing  to  that  printer.  This  is  because  the  code  to  close  the  print  job  is  in  the  Form_Unload  event.  This  event  is  not  executed  when  the  sample  is  closed  by  the  design  environment.  Always  terminate  the  application  by  clicking  the  Close  button,  using  the  System  menu,  or  entering  Alt-F4.
References
For  more  information  about  using  the  Win32  API  to  send  data  directly  to  the  printer,  please  see  the  following  article  in  the  Microsoft  Knowledge  Base:
Q154078  :  HOWTO:  Send  Raw  Data  to  a  Printer  Using  the  Win32  API  from  VB

解决方案 »

  1.   

    你先定义合适的纸型,打印时选中这种纸型,使用printer方法打印就可以了
      

  2.   

    你是希望打印连续纸发票吧,发票一般是80列穿孔打印纸高度的1/3约9.5mm
    每毫米55tips,因此,你可以这样,
    Printer.height=5292
    Printer.Width=20000
    ....
    Printer.Print "你的打印信息"
    .....
    Printer.EndDoc
    前提是打印机应带有中文字库,最好使用Star5400系列票据机,方便自动撕纸
      

  3.   

    在程序中设置好纸张的大小,然后算一下一页纸大约可以打印几行(比方说30行行),再设置一个记数变量,只要是30的倍数则执行printer.newpage打印下一页。