Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Como imprimir linha por linha numa impressora

Imprimir página por página no Windows é padrão, mas às vezes é desejável imprimir linha por linha ao invés de página por página. Apesar do objeto Printer do Visual Basic não suportar este modo de impressão, usando funções da API podemos conseguir realizá-lo.

 

Mais informação

Esta técnica só se aplica a impressão em impressoras locais do tipo matriciais. Impressoras laser e jato de tinta são impressoras de página e não imprimirão no modo linha por linha.

  1. Crie um novo projeto no Visual Basic e adicione um botão de comando no Form1.
  2. Adicione o seguinte código no 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 = "Que mágica !!!!" & 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 "Impressora não é reconhecida."
                  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. Torne a impressora escolhida a impressora padrão e rode a aplicação. Cada vez que você clicar no botão Command1, uma linha será imediatamente impressa na impressora.
AVISO: Pressionando o botão End na barra de ferramentas do VB ou selecionando a opção End no menu Run não fechará o trabalho de impressão e pode bloquear futuros trabalhos de impressão naquela impressora. Isto porque o código para fechar o trabalho de impressão está no evento Form_Unload. Este evento não é executado quando o exemplo é fechado pelo ambiente de desenvolvimento. Sempre termine a aplicação clicando no botão Fechar, usando o menu de sistema, ou entrando com Alt-F4.