Foros del Web » Programación para mayores de 30 ;) » .NET »

Solo imprimir una parte

Estas en el tema de Solo imprimir una parte en el foro de .NET en Foros del Web. Hola amigos y amigas, tengo un problema, estoy tratando de imprimir un ticket en una impresora termica, lo he conseguido hacer pero solo me imprimir ...
  #1 (permalink)  
Antiguo 06/06/2013, 19:41
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Pregunta Solo imprimir una parte

Hola amigos y amigas, tengo un problema, estoy tratando de imprimir un ticket en una impresora termica, lo he conseguido hacer pero solo me imprimir aprox. en el tamano de una pagina.

El codigo me imprime muy bien
los titulos y cabeceras, el problema viene cuando los items son mas de 50 (lineas) creo, y no imprime mas..
Estuve buscando en internet y me dice que tengo q utilizar e.HasMorePages = True
pero no puedo hacerlo funcionar.
muchas gracias
  #2 (permalink)  
Antiguo 06/06/2013, 19:43
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Solo imprimir una parte

Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Printing
Imports System
Imports System.IO

Public Class ticket

Public LineasDeLatitulo As ArrayList = New ArrayList()
Public LineasDeLaCabeza As ArrayList = New ArrayList()
Public LineasDeLaSubCabeza As ArrayList = New ArrayList()
Public Elementos As ArrayList = New ArrayList()
Public Totales As ArrayList = New ArrayList()
Public LineasDelPie As ArrayList = New ArrayList()

Private headerImagep As Image

Public contador As Integer = 0

Public CaracteresMaximos As Integer = 37
Public CaracteresMaximosDescripcion As Integer = 60

Public imageHeight As Integer = 0

Public MargenIzquierdo As Double = 0
Public MargenSuperior As Double = 0

Public NombreDeLaFuente As String = "Arial"


Public TamanoDeLaFuente As Integer = 9
Public TamanoDeLaFuenteg As Integer = 11

Public FuenteImpresa As Font
Public FuenteImpresa2 As Font


Public ColorDeLaFuente As SolidBrush = New SolidBrush(Color.Black)

Public gfx As Graphics
Public fx

Public CadenaPorEscribirEnLinea As String = ""
Private WithEvents DocumentoAImprimir As New PrintDocument
Private WithEvents PrintPreviewDialog1 As New PrintPreviewDialog

Public Sub Ticket()


End Sub

Public Property HeaderImage() As Image
Get
Return headerImagep
End Get
Set(ByVal value As Image)
'If headerImagep.Width <> value.Width Then

'End If
headerImagep = value
End Set
End Property



Public Property MaximoCaracter() As Integer
Get
Return CaracteresMaximos
End Get
Set(ByVal value As Integer)
If (value <> CaracteresMaximosDescripcion) Then CaracteresMaximosDescripcion = value
End Set
End Property



Public Property MaximoCaracterDescripcion() As Integer
Get
Return CaracteresMaximosDescripcion
End Get
Set(ByVal value As Integer)
If (value <> CaracteresMaximosDescripcion) Then CaracteresMaximosDescripcion = value
End Set
End Property



Public Property TamanoLetra() As Integer
Get
Return TamanoDeLaFuente
End Get
Set(ByVal value As Integer)
If (value <> TamanoDeLaFuente) Then TamanoDeLaFuente = value
End Set
End Property

Public Property TamanoLetrag() As Integer
Get
Return TamanoDeLaFuenteg
End Get
Set(ByVal value As Integer)
If (value <> TamanoDeLaFuente) Then TamanoDeLaFuente = value
End Set
End Property


Public Property NombreLetra() As String
Get
Return NombreDeLaFuente
End Get
Set(ByVal value As String)
If (value <> NombreDeLaFuente) Then NombreDeLaFuente = value
End Set
End Property

Public Sub AnadirLineatitulo(ByVal linea As String)
LineasDeLatitulo.Add(linea)
End Sub
Public Sub AnadirLineaCabeza(ByVal linea As String)
LineasDeLaCabeza.Add(linea)
End Sub

Public Sub AnadirLineaSubcabeza(ByVal linea As String)

LineasDeLaSubCabeza.Add(linea)
End Sub

Public Sub AnadirElemento(ByVal cantidad As String, ByVal elemento As String, ByVal precio As String)

Dim NuevoElemento As OrdenarElementos = New OrdenarElementos()
'''''items.Add(newitem.
Elementos.Add(NuevoElemento.GenerarElemento(cantid ad, elemento, precio))

End Sub

Public Sub AnadirTotal(ByVal Nombre As String, ByVal Precio As String)
Dim NuevoTotal As OrdernarTotal = New OrdernarTotal
' OrderTotal(newtotal)

Totales.Add(NuevoTotal.GenerarTotal(Nombre, Precio))
End Sub

Public Sub AnadeLineaAlPie(ByVal linea As String)
LineasDelPie.Add(linea)
End Sub

Private Function AlineaTextoaLaDerecha(ByVal Izquierda As Integer) As String

Dim espacios As String = ""
Dim spaces As Integer = MaximoCaracter() - Izquierda
Dim x As Integer
For x = 0 To spaces
espacios += " "
Next
Return espacios
End Function

Private Function DottedLine() As String

Dim dotted As String = ""
Dim x As Integer
For x = 0 To MaximoCaracter()
dotted += "="
Next
Return dotted
End Function
Public Function ImpresoraExistente(ByVal impresora As String) As Boolean

For Each strPrinter As String In PrinterSettings.InstalledPrinters

If impresora = strPrinter Then
Return True
End If
Next strPrinter
Return False
End Function

Public Sub ImprimeTicket(ByVal impresora As String)

FuenteImpresa = New Font(NombreLetra, TamanoLetra, FontStyle.Regular)
FuenteImpresa2 = New Font(NombreLetra, TamanoLetrag, FontStyle.Bold)
'Dim pr As New PrintDocument
DocumentoAImprimir.PrinterSettings.PrinterName = impresora
DocumentoAImprimir.DocumentName = "DON TIKI"

'pr.PrinterSettings.printpa()
' pr.PrintPage += New
' PrintPageEventHandler(pr_PrintPage)
DocumentoAImprimir.Print()

End Sub
  #3 (permalink)  
Antiguo 06/06/2013, 19:45
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Solo imprimir una parte

Private Sub DocumentoAImprimir_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles DocumentoAImprimir.PrintPage

e.Graphics.PageUnit = GraphicsUnit.Millimeter

gfx = e.Graphics
fx = e




Dibujatitulo()

DibujaLaCabecera()

DibujaLaSubCabecera()

DibujaElementos()


DibujaTotales()
DibujarPieDePagina()


End Sub

Private Function Renglon() As Double
Return MargenSuperior + (contador * FuenteImpresa.GetHeight(gfx) + imageHeight)
End Function


Private Sub Dibujatitulo()

For Each Cabecera As String In LineasDeLatitulo

If (Cabecera.Length > MaximoCaracter()) Then

Dim CaracterActual As Integer = 0
Dim LongitudDeCabecera As Integer = Cabecera.Length

While (LongitudDeCabecera > MaximoCaracter())

CadenaPorEscribirEnLinea = Cabecera.Substring(CaracterActual, MaximoCaracter)
gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
contador += 1
CaracterActual += MaximoCaracter()
LongitudDeCabecera -= MaximoCaracter()
End While
CadenaPorEscribirEnLinea = Cabecera
gfx.DrawString(CadenaPorEscribirEnLinea.Substring( CaracterActual, CadenaPorEscribirEnLinea.Length - CaracterActual), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
contador += 1

Else


CadenaPorEscribirEnLinea = Cabecera
gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa2, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
End If
Next Cabecera

End Sub


Private Sub DibujaLaCabecera()

For Each Cabecera As String In LineasDeLaCabeza

If (Cabecera.Length > MaximoCaracter()) Then

Dim CaracterActual As Integer = 0
Dim LongitudDeCabecera As Integer = Cabecera.Length

While (LongitudDeCabecera > 60)

CadenaPorEscribirEnLinea = Cabecera.Substring(CaracterActual, MaximoCaracter)
gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
contador += 1
CaracterActual += MaximoCaracter()
LongitudDeCabecera -= MaximoCaracter()
End While
CadenaPorEscribirEnLinea = Cabecera
gfx.DrawString(CadenaPorEscribirEnLinea.Substring( CaracterActual, CadenaPorEscribirEnLinea.Length - CaracterActual), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
contador += 1

Else


CadenaPorEscribirEnLinea = Cabecera
gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
End If
Next Cabecera
DibujaEspacio()
End Sub

Private Sub DibujaLaSubCabecera()

For Each SubCabecera As String In LineasDeLaSubCabeza

If (SubCabecera.Length > MaximoCaracter()) Then

Dim CaracterActual As Integer = 0
Dim LongitudSubcabecera As Integer = SubCabecera.Length

While (LongitudSubcabecera > 50)

CadenaPorEscribirEnLinea = SubCabecera
gfx.DrawString(CadenaPorEscribirEnLinea.Substring( CaracterActual, MaximoCaracter), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
CaracterActual += MaximoCaracter()
LongitudSubcabecera -= MaximoCaracter()
End While
CadenaPorEscribirEnLinea = SubCabecera
gfx.DrawString(CadenaPorEscribirEnLinea.Substring( CaracterActual, CadenaPorEscribirEnLinea.Length - CaracterActual), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
contador += 1

Else

CadenaPorEscribirEnLinea = SubCabecera

gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1

CadenaPorEscribirEnLinea = DottedLine()

gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
End If
Next SubCabecera
DibujaEspacio()
End Sub

Private Sub DibujaElementos()

Dim OrdenElemento As OrdenarElementos = New OrdenarElementos()

gfx.DrawString("Cant Descripción Valor", FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
DibujaEspacio()

For Each Elemento As String In Elementos

CadenaPorEscribirEnLinea = OrdenElemento.ObtenerCantidadDeElementos(Elemento)

gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
CadenaPorEscribirEnLinea = OrdenElemento.ObtenerPrecioElemento(Elemento)
CadenaPorEscribirEnLinea = AlineaTextoaLaDerecha(CadenaPorEscribirEnLinea.Len gth) + CadenaPorEscribirEnLinea
''áqui se le cambia el margen
gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, 27, Renglon(), New StringFormat())

Dim Nombre As String = OrdenElemento.ObtenerNombreElemento(Elemento)

MargenIzquierdo = 0
If (Nombre.Length > MaximoCaracterDescripcion) Then

Dim CaracterActual As Integer = 0
Dim LongitudElemento As Integer = Nombre.Length

While (LongitudElemento > MaximoCaracterDescripcion)

CadenaPorEscribirEnLinea = OrdenElemento.ObtenerNombreElemento(Elemento)
gfx.DrawString(" " + CadenaPorEscribirEnLinea.Substring(CaracterActual, MaximoCaracterDescripcion), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
CaracterActual += MaximoCaracterDescripcion
LongitudElemento -= MaximoCaracterDescripcion
End While

CadenaPorEscribirEnLinea = OrdenElemento.ObtenerNombreElemento(Elemento)
gfx.DrawString(CadenaPorEscribirEnLinea.Substring( CaracterActual, CadenaPorEscribirEnLinea.Length - CaracterActual), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon() + 10, New StringFormat())
contador += 1


Else

gfx.DrawString(" " + OrdenElemento.ObtenerNombreElemento(Elemento), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
End If


Next Elemento


MargenIzquierdo = 1
DibujaEspacio()
CadenaPorEscribirEnLinea = DottedLine()

gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
DibujaEspacio()
End Sub
Private Sub DibujaTotales()

Dim ordTot As OrdernarTotal = New OrdernarTotal()

For Each total As String In Totales

CadenaPorEscribirEnLinea = ordTot.ObtenerTotalCantidad(total)
CadenaPorEscribirEnLinea = AlineaTextoaLaDerecha(CadenaPorEscribirEnLinea.Len gth) + CadenaPorEscribirEnLinea

gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
MargenIzquierdo = 1

CadenaPorEscribirEnLinea = " " + ordTot.ObtenerTotalNombre(total)
gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
contador += 1
Next total
MargenIzquierdo = 10
DibujaEspacio()
DibujaEspacio()
End Sub
  #4 (permalink)  
Antiguo 06/06/2013, 19:45
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Solo imprimir una parte

Private Sub DibujarPieDePagina()

For Each PieDePagina As String In LineasDelPie

If (PieDePagina.Length > MaximoCaracter()) Then

Dim currentChar As Integer = 0
Dim LongitudPieDePagina As Integer = PieDePagina.Length

While (LongitudPieDePagina > MaximoCaracter())

CadenaPorEscribirEnLinea = PieDePagina
gfx.DrawString(CadenaPorEscribirEnLinea.Substring( currentChar, MaximoCaracter), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
currentChar += MaximoCaracter()
LongitudPieDePagina -= MaximoCaracter()
End While
CadenaPorEscribirEnLinea = PieDePagina
gfx.DrawString(CadenaPorEscribirEnLinea.Substring( currentChar, CadenaPorEscribirEnLinea.Length - currentChar), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
contador += 1

Else

CadenaPorEscribirEnLinea = PieDePagina
gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1
End If
Next PieDePagina
MargenIzquierdo = 10
DibujaEspacio()
End Sub

Private Sub DibujaEspacio()

CadenaPorEscribirEnLinea = " "

gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

contador += 1

End Sub

Public Sub New()

End Sub


End Class




Public Class OrdernarTotal

Public delimitador() As Char = " "

Public Sub OrdernarTotal(ByVal delimit As Char)

Dim delimitador As Char = delimit
End Sub

Public Function ObtenerTotalNombre(ByVal totalItem As String) As String

Dim delimitado() As String = totalItem.Split(delimitador)
Return delimitado(0)

End Function
Public Function ObtenerTotalCantidad(ByVal totalItem As String) As String

Dim delimitado() As String = totalItem.Split(delimitador)
Return delimitado(1)
End Function

Public Function GenerarTotal(ByVal totalName As String, ByVal price As String) As String

GenerarTotal = totalName + delimitador(0) + price
End Function

End Class
Public Class Form2

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
original()

Me.Close()
End Sub
Private Sub original()
Dim factura
Dim copia

mysqlconn3.ConnectionString = cadenacon
mysqlconn3.Open()
strsqlmsql3 = "select * from imprimir order by madre desc"
mysqlcmd3.CommandText = strsqlmsql3
mysqlcmd3.Connection = mysqlconn3
mysqlda3.SelectCommand = mysqlcmd3
mysqldr3 = mysqlcmd3.ExecuteReader
If mysqldr3.Read Then
factura = mysqldr3.Item("factura")
copia = mysqldr3.Item("copia")
End If

mysqlcmd3.Dispose()
mysqldr3.Close()
mysqlconn3.Close()
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
mysqlconn.ConnectionString = cadenacon
mysqlconn.Open()
strsqlmsql = "SELECT * from movimientos where factura='" & factura & "'"
mysqlcmd.CommandText = strsqlmsql
mysqlcmd.Connection = mysqlconn
mysqlda.SelectCommand = mysqlcmd
mysqldr = mysqlcmd.ExecuteReader
If mysqldr.Read Then
Dim fechai = Format(mysqldr.Item("fechaf"), "dd/MM/yy")
Dim hora = Format(mysqldr.Item("fechaf"), "hh:mm:ss tt")
Dim a As ticket = New ticket
a.AnadirLineatitulo(" TU NEGOCIO")
a.AnadirLineaCabeza(" eslogan")
a.AnadirLineaCabeza(" RTN xxxxx")
a.AnadirLineaCabeza(" Tel. (xxx) xxxx")
a.AnadirLineaCabeza(" ubicacion")
a.AnadirLineaCabeza(" xxxxx xxx")


a.AnadirLineaSubcabeza("Factura #" & mysqldr.Item("factura") & " CAJA#1")
a.AnadirLineaSubcabeza("Fecha: " & fechai & " " & hora)
a.AnadirLineaSubcabeza("Cliente: " & mysqldr.Item("cliente") & " " & mysqldr.Item("identificacion"))
''''''''''''''''''''''
mysqlconn3.ConnectionString = cadenacon
mysqlconn3.Open()
strsqlmsql3 = "select SUBSTRING(nombre_producto,1,35) as nombre_producto,cantidad,total_plato,subtotal,valo r_impuesto,descuento,total from movimientos where factura='" & factura & "' and (titulo_plato='' or titulo_plato='TOTAL PLATO') order by madre asc"
mysqlcmd3.CommandText = strsqlmsql3
mysqlcmd3.Connection = mysqlconn3
mysqlda3.SelectCommand = mysqlcmd3
mysqldr3 = mysqlcmd3.ExecuteReader
Dim valorimpuesto = 0
Dim valordescuento = 0
Dim subtotal = 0
Dim totalimpuesto = 0
Dim total = 0
Dim cantidad
Dim ncantidad

While mysqldr3.Read


a.AnadirElemento("" & cantidad & "", " " & mysqldr3.Item("nombre_producto") & ";", ";" & FormatNumber(mysqldr3.Item("total"), 2) & "")



valorimpuesto = valorimpuesto + mysqldr3.Item("valor_impuesto")
valordescuento = valordescuento + mysqldr3.Item("descuento")
subtotal = subtotal + (mysqldr3.Item("subtotal") - mysqldr3.Item("valor_impuesto") - mysqldr3.Item("descuento"))
total = total + mysqldr3.Item("total")

End While

mysqlcmd3.Dispose()
mysqldr3.Close()
mysqlconn3.Close()
''''''''''''''''''''''

'El metodo AddTotal requiere 2 parametros, la descripcion del total, y el precio
a.AnadirTotal("Subtotal", "" & FormatNumber(subtotal, 2) & "")
a.AnadirTotal("Descuento", "" & FormatNumber(valordescuento, 2) & "")
a.AnadirTotal("Impuesto", "" & FormatNumber(valorimpuesto, 2) & "")
a.AnadirTotal("Total", "" & FormatNumber(total, 2) & "")
a.AnadirTotal("", "") ' //Ponemos un total en blanco que sirve de espacio

If mysqldr.Item("efectivo") > 0 Then
a.AnadirTotal("Efectivo", "" & FormatNumber(mysqldr.Item("efectivo"), 2) & "")
Else

End If

If mysqldr.Item("tarjeta") > 0 Then
a.AnadirTotal("Tarjeta", "" & FormatNumber(mysqldr.Item("tarjeta"), 2) & "")
Else

End If

a.AnadirTotal("Cambio", "" & FormatNumber(mysqldr.Item("cambio"), 2) & "")
a.AnadirTotal("", "") '/Ponemos un total en blanco que sirve de espacio
'//El metodo AddFooterLine funciona igual que la cabecera
a.AnadeLineaAlPie(" Total item: " & ncantidad & "")
a.AnadeLineaAlPie(" La factura es beneficio de todos")
a.AnadeLineaAlPie(" EXIJALA!!!")
a.AnadeLineaAlPie(" usuario: " & mysqldr.Item("usuario"))
a.AnadeLineaAlPie(" www.pagina.com")
If (copia <> "") Then
a.AnadeLineaAlPie(" ---- Copia ---")
End If
a.ImprimeTicket(impresora)
End If
mysqlcmd.Dispose()
mysqldr.Close()
mysqlconn.Close()



End Sub


End Class



ese es el cogido!!!!!
me tiene sin pelo ya!!!

Etiquetas: net, parte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:40.