locked
Slow Print - Terminal Services RRS feed

  • Question

  • Hello,

    i connect to a remote pc via terminal services, when i print with the Microsoft Office Word i get the print in my local printer fast, but when i try to print with my own application the print take 10 seconds.

    I use to print the control PrintDocument.

    Thanks in advance for any help.

    Note: sorry for my poor english.

    Thursday, August 11, 2011 10:53 AM

All replies

  • Hi Danielovik,

    Thank you for your posting.

    What size of your printing file?

    In actually, 10 seconds should be acceptable. When you print the document with Word, how long do you open the word? In your application, it open the file by itself and excute the printing subroutine, and close the file. So 10 seconds should be reasonable.

    You can post your whole code here, I will check it to verify it can be optimized.

    Best regards,

     


    Mike Feng [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Monday, August 15, 2011 6:33 AM
  • Hi Mike,

    Ok i think i do a mistake.

    I want to print a ticket, with information from a form. This ticket was printed too slow, and i thought that the connection are slow. Then i print any document with the Microsoft Office and then the print of a file bigger are printed in less time.

    I tryed in two differents ways:

    - With Crystal Report.

    Public Shared Sub ImprimirLOPD(ByVal filaSocio As SociosRow)        
        Dim crystal As New FichaSocio
        'Dim reporte As New ReportDocument
    
        'Valores para los parametros
        Dim dni_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
        Dim nombre_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
        Dim apellidos_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
        Dim domicilio_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
        Dim municipio_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
        Dim provincia_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
        Dim fechanacimiento_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
        Dim lopd_discreto As ParameterDiscreteValue = New ParameterDiscreteValue()
    
        'DNI
        dni_discreto.Value = filaSocio.dni
        crystal.SetParameterValue("dni", dni_discreto)
    
        'NOMBRE
        nombre_discreto.Value = filaSocio.nombre
        crystal.SetParameterValue("nombre", nombre_discreto)
    
        'APELLIDOS
        Dim apellido2 As String
        If filaSocio.Isapel2Null Then
          apellido2 = ""
        Else
          apellido2 = filaSocio.apel2
        End If
        apellidos_discreto.Value = filaSocio.apel1 & " " & apellido2
        crystal.SetParameterValue("apellidos", apellidos_discreto)
    
        Dim domicilio As String
        If filaSocio.IscalleNull Then
          domicilio = ""
        Else
          domicilio = filaSocio.calle
        End If
        'DOMICILIO
        domicilio_discreto.Value = domicilio
        crystal.SetParameterValue("domicilio", domicilio_discreto)
    
        'MUNICIPIO
        municipio_discreto.Value = filaSocio.municipio.ToUpper
        crystal.SetParameterValue("municipio", municipio_discreto)
    
        'PROVINCIA
        provincia_discreto.Value = filaSocio.provincia.ToUpper
        crystal.SetParameterValue("provincia", provincia_discreto)
    
        'FECHA NACIMIENTO
        fechanacimiento_discreto.Value = filaSocio.fecha_nacimiento
        crystal.SetParameterValue("fechanacimiento", fechanacimiento_discreto)
    
        'LOPD
        lopd_discreto.Value = "En cumplimiento de lo establecido en la Ley Órganica 15/99 de 13 de diciembre, de Protección de Datos de Carácter Personal, " & _
         "le informamos que sus datos forman parte de un fichero propiedad de CANABINGO SA, para el envío de comunicaciones o información de nuestros productos " & _
         "y/o servicios. Asimismo le informamos que puede ejercer los derechos de acceso, rectificación, cancelación y oposición en nuestro domicilio social, sito " & _
         "en C/ PEREGRINOS, 3 (URB. INDUST. EL GORO) 35219 TELDE (LAS PALMAS)"
        crystal.SetParameterValue("lopd", lopd_discreto.Value)
    
        'Dim margenes As New CrystalDecisions.Shared.PageMargins
        'margenes.leftMargin = 600
        'margenes.rightMargin = 0
        'crystal.PrintOptions.ApplyPageMargins(margenes)    
    
        crystal.PrintToPrinter(1, False, 0, 0)
      End Sub
    

    and the other test.

    With e.Graphics.

    Private Sub Impresora_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles Impresora.PrintPage
        Try
          Dim _dni As String = " " & txtDNI.Text.Trim.ToUpper
          Dim _nombre As String = " " & txtNombre.Text.Trim.ToUpper
          Dim _apellidos As String = " " & txtApel1.Text.Trim.ToUpper & " " & txtApel2.Text.Trim.ToUpper
          Dim _domicilio As String = " " & txtCalle.Text.Trim.ToUpper
          Dim _municipio As String = " " & txtPoblacion.Text.Trim.ToUpper
          Dim _provincia As String = " " & cboProvincias.Text.Trim.ToUpper
          Dim _fechanacimiento As String = " " & txtFNacimiento.Text.Trim.ToUpper
    
          Dim dni As String = "Número identificación: " & _dni & " " & txtLetra.Text
          Dim nombre As String = "Nombre: " & _nombre
          Dim apellidos As String = "Apellidos: " & _apellidos
    
          Dim domicilio As String = "Domicilio: " & _domicilio
          Dim Municipio As String = "Municipio: " & _municipio
          Dim provincia As String = "Provincia: " & _provincia
          Dim fechaNacimiento As String = "Fecha de nacimiento: " & _fechanacimiento
          'Dim telefono As String = "Teléfono: " & txtTelefono.Text.ToUpper
          Dim LOPD As String
          LOPD = "En cumplimiento de lo establecido en la Ley Órganica 15/99 de 13 de diciembre, de Protección de Datos de Carácter Personal, " & _
           "le informamos que sus datos forman parte de un fichero propiedad de CANABINGO SA, para el envío de comunicaciones o información de nuestros productos " & _
           "y/o servicios. Asimismo le informamos que puede ejercer los derechos de acceso, rectificación, cancelación y oposición en nuestro domicilio social, sito " & _
           "en C/ PEREGRINOS, 3 (URB. INDUST. EL GORO) 35219 TELDE (LAS PALMAS)"
    
          Dim FuenteImpr As New Font("Arial", 10)
          Dim numCaract As Integer = 0
          Dim numLineas As Integer = 0
          Dim strFormato As New StringFormat()
          'define un rectángulo basándose en la configuración de página 
    
          'Dim rectDibujar As New RectangleF( _
          ' e.MarginBounds.Left, e.MarginBounds.Top, _
          ' e.MarginBounds.Width, e.MarginBounds.Height)
    
          Dim rectDibujar As New RectangleF( _
           5, e.MarginBounds.Top, _
           e.MarginBounds.Width + 180, e.MarginBounds.Height)
    
          Dim medidaTamaño As New SizeF(e.MarginBounds.Width + 180, _
           e.MarginBounds.Height - FuenteImpr.GetHeight(e.Graphics))
    
          'DNI:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(dni, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo
          e.Graphics.DrawString(dni, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
          'Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics)
    
    
          'Nombre:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(nombre, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo
          e.Graphics.DrawString(nombre, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
          'Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics)
    
          'Apellidos:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(apellidos, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo la cadena
          e.Graphics.DrawString(apellidos, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
          'Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics)
    
          'Domicilio:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(domicilio, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo
          e.Graphics.DrawString(domicilio, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
          'Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics)
    
          'Municipio:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(Municipio, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo
          e.Graphics.DrawString(Municipio, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
          'Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics)
    
          'Provincia:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(provincia, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo
          e.Graphics.DrawString(provincia, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
          'Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics)
    
          'Fecha de nacimiento:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(fechaNacimiento, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo
          e.Graphics.DrawString(fechaNacimiento, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
          'Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics) + 100
    
          ''Telefono:
          ''Calculo el numero de caracteres y de lineas
          'e.Graphics.MeasureString(telefono, FuenteImpr, _
          ' medidaTamaño, strFormato, numCaract, numLineas)
          ''Dibujo
          'e.Graphics.DrawString(telefono, FuenteImpr, _
          ' Brushes.Black, rectDibujar, strFormato)
          ''Incremento la altura en funcion del numero de lineas que calcule que se dibujarian
          'rectDibujar.Y = rectDibujar.Y + numLineas * FuenteImpr.GetHeight(e.Graphics) + 100
    
          'LOPD:
          'Calculo el numero de caracteres y de lineas
          e.Graphics.MeasureString(LOPD, FuenteImpr, _
           medidaTamaño, strFormato, numCaract, numLineas)
          'Dibujo
          e.Graphics.DrawString(LOPD, FuenteImpr, _
           Brushes.Black, rectDibujar, strFormato)
    
          e.HasMorePages = False
    
        Catch ex As Exception
          MsgBox("NO SE HA PODIDO IMPRIMIR. SI CONTINUA AVISAR A SOPORTE INFORMATICO.", MsgBoxStyle.Critical)
        End Try
      End Sub
    


    Both are too slow, over 10 seconds.

    The file print size is over 70-80Kilobytes.

    If i send a empty file, also be slow 10 seconds.

    Tuesday, August 16, 2011 9:05 AM
  • Hi Danielovik,

    Thank you for providing more details about this issue.

    I don't comment your first way since the crystal report wasn't supported here any more. Maybe the other community members will do.

    In your second way, you can declare a local variable Dim eHeight as single = FuenteImpr.GetHeight(e.Graphics)  instead of call the method every time.

    For now, you code should work fine. You can add this line to your code to test the time consuming steps:

    Console.WriteLine("time: " & Now.Second & "." & Now.Millisecond)

    I hope this will be helpful.

    Best regards,


    Mike Feng [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Wednesday, August 17, 2011 3:56 AM
  • Hi Mike,

    the problem dont appear have a solution :/

    The print time are too long.

    Ill continue searching,

    thanks for all :)

     

    Monday, August 22, 2011 11:17 AM
  • Hi Danielovik,

    You are welcome.

    If you have a further concerns, please feel free to follow up.

    Best regards,


    Mike Feng [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Tuesday, August 23, 2011 3:12 PM