Asked by:
Slow Print - Terminal Services

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