Minggu, 18 Mei 2014

Cetak struk dengan printer Mini Kasir (Epson TMU220,Eppos,MiniPos) dengan vb.net 2010

Halo
Assalamualaikum
Bismillah hirohmanirohim 
allah memberkati kita semua

pada kesempatan ini sy ingin share gmana print struk di printer kasir macam Epson Tmu 220 agar kertas tidak menggulung (panjang kertas Pas dengan data yg di cetak).
berikut ini adalah contoh kode vb.net 2010:

buat class

'---------
Imports System.IO
Imports System.Drawing.Printing
Imports System.Runtime.InteropServices

Public Class RawPrinterHelper

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
    Structure DOCINFOW
        <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
        <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
        <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
    End Structure

    <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
       SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
       SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
       SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
       SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
       SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
       SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
       SetLastError:=True, CharSet:=CharSet.Unicode, _
       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
    End Function

    Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
        Dim hPrinter As IntPtr
        Dim dwError As Int32
        Dim di As DOCINFOW
        Dim dwWritten As Int32
        Dim bSuccess As Boolean


        With di
            .pDocName = "Toko Komputer"
            .pDataType = "RAW"
        End With

        bSuccess = False
        If OpenPrinter(szPrinterName, hPrinter, 0) Then
            If StartDocPrinter(hPrinter, 1, di) Then
                If StartPagePrinter(hPrinter) Then

                    bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
                    EndPagePrinter(hPrinter)
                End If
                EndDocPrinter(hPrinter)
            End If
            ClosePrinter(hPrinter)
        End If
        If bSuccess = False Then
            dwError = Marshal.GetLastWin32Error()
        End If
        Return bSuccess
    End Function


    Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
        Dim fs As New FileStream(szFileName, FileMode.Open)
        Dim br As New BinaryReader(fs)
        Dim bytes(fs.Length) As Byte
        Dim bSuccess As Boolean
        Dim pUnmanagedBytes As IntPtr


        bytes = br.ReadBytes(fs.Length)

        pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)

        Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)

        bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)

        Marshal.FreeCoTaskMem(pUnmanagedBytes)
        Return bSuccess
    End Function

   
    Public Shared Function SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
        Dim pBytes As IntPtr
        Dim dwCount As Int32

        dwCount = szString.Length()
   
        pBytes = Marshal.StringToCoTaskMemAnsi(szString)

        SendBytesToPrinter(szPrinterName, pBytes, dwCount)
        Marshal.FreeCoTaskMem(pBytes)
    End Function
End Class

'--------------------

kemudian ini untuk mencetak

'----------------

Imports System.Drawing.Printing
    Sub cetak_struk()
  
        Dim s As String
        Const sLN As String = ControlChars.CrLf
        'Const tabx As String = ControlChars.Tab
        Dim pd As New PrintDialog
        Dim oPS As New System.Drawing.Printing.PrinterSettings
        'Dim sps As String

        s &= "            Toko Brownis Fortuna" & sLN
        s &= "Otlate   :  " & sLN
        s &= "Kasir    :" & sLN
        s &= "No struk :" & sLN
        s &= "tanggal  :  " & TimeOfDay & " " & sLN
        s &= "__________________________________________" & sLN
       'untuk mencetak item
 For x As Integer = 0 To dgvjual.RowCount - 1
            s &= " item  " & x & "   & " " & sLN
  
        Next
        s &= "                                           " & sLN
        s &= "                                           " & sLN
        s &= "                       ____________________" & sLN
        s &= "                        Subtotal :  101.000" & sLN
        s &= "                        Cash     :  101.000" & sLN
        s &= "                        Kembali  :  101.000" & sLN
        s &= "                                           " & sLN
        s &= "                                           " & sLN
        s &= "                                           " & sLN
        s &= "******Terima Kasih atas kunjungan anda*****" & sLN


        pd.PrinterSettings = New PrinterSettings
        'Dim prname As String
        RawPrinterHelper.SendStringToPrinter(oPS.PrinterName, s)
    End Sub


demikian silahkan di coba semoga bermanfaat.


how coffee can prevent cancer

Coffee and Cancer: An Examination of the Relationship   Coffee, one of the most consumed beverages worldwide, has been the subject of extens...