HOWTO: Print Line-by-Line to a Printer

Last reviewed: January 13, 1998
Article ID: Q175083
The information in this article applies to:
  • Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, version 5.0
  • Microsoft Visual Basic Standard, Professional, and Enterprise Editions, 32-bit only, 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.

  1. Create a new Visual Basic project and place a CommandButton on Form1.

  2. 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
    
    

  3. Make the logging printer the default and run the application. Every time you click Command1, a line should be immediately printed to your printer.

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:

   ARTICLE-ID: Q154078
   Title     : HOWTO: Send Raw Data to a Printer Using the Win32 API
               from VB
Keywords          : vb432 VB4WIN vb5all vb5howto kbprint
Version           : WINDOWS:4.0,5.0
Platform          : WINDOWS
Issue type        : kbhowto


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: January 13, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.