none
Problema con la impresión de documentos con PrintPage del Objeto PrintDocument RRS feed

  • Pregunta

  • Hola Amigos del Foro,

    Tengo un problema que se me genera al realizar un PrintPreview de una serie de elementos alojados en elementos List<T>.

    El problema es el siguiente, cuando envío el documento al PrintPreview inicialmente se genera correctamente de acuerdo a lo que espero; pero cuando repito la acción inmediatamente después de cerrar el printPreview se genera nuevamente; pero esta vez se experimentan cambios en algunos elementos sin que yo haya cambiado ningún elemento. Especificamente el elemento que registra el cambio es :

    Single hight = e.MarginBounds.Height; // En el primer Preview es 900, luego en el siguiente Preview cambia a 820.

    A continuación Anexo el código:

    void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    		{
    			Margins margenes = new Margins(60, 60, 220, 60);
    			printDocument1.DefaultPageSettings.Margins = margenes;
    			Font fte = new Font("verdana", 10, FontStyle.Regular);
    			Font ftti = new Font("verdana", 10, FontStyle.Bold);
    			SolidBrush br = new SolidBrush(Color.Black);
    
    			Single xPos = e.MarginBounds.Left;
    			Single yPos = e.MarginBounds.Top;
    			Single hight = e.MarginBounds.Height;
    			Single incLine = 20;
    
    			int printHeight;
    			printHeight = e.MarginBounds.Height - printDocument1.DefaultPageSettings.Margins.Bottom -
    				printDocument1.DefaultPageSettings.Margins.Top;
    
    			int x = 0;
    			int k = 0;
    			int r = 0;
    			int m = 0;
    			int n = 0;
    			
    			itempage = 0;
    			while(contador < lista1.Count){
    				x = contador;
    				e.Graphics.DrawString("" + x, fte, Brushes.Black, 70, yPos + incLine);
    				e.Graphics.DrawString(lista1[x].ToString("0.000"), fte, Brushes.Black, 130, yPos + incLine);
    				incLine += 22;
    				contador++;
    				itempage++;
    				if (itempage == 35)
    				{
    					PaginaNumero++;
    					e.HasMorePages = x < lista1.Count;
    					return;
    				}
    			}
    			PaginaNumero++;
    			e.HasMorePages = x < lista1.Count;
    
    			itemporpage = 0;
    			if (PaginaNumero > 2) {
    				while (count < numeros.Count) {
    					k = count;
    					while (count1 < numeros[k].Count) {
    						r = count1;
    						e.Graphics.DrawString("" + r, fte, Brushes.Black, 70, yPos + incLine);
    						e.Graphics.DrawString(numeros[k][r].ToString("0.000"), fte, Brushes.Black, 130, yPos + incLine);
    						incLine += 22;
    						count1++;
    						itemporpage++;
    						if (itemporpage == 36) {
    							PaginaNumero++;
    							e.HasMorePages = k < numeros.Count && count1 < numeros[k].Count;
    							return;
    						}
    					}
    					count++;
    					count1 = 0;
    					PaginaNumero++;
    					e.HasMorePages = count1 < numeros[k].Count;
    					return;
    				}
    			}
    			PaginaNumero++;
    			e.HasMorePages = count1 < numeros[k].Count;
    			
    			itempage2 = 0;
    			if (PaginaNumero > 8) {
    				while (count2 < lista2.Count) {
    					n = count2;
    					e.Graphics.DrawString("" + n, fte, Brushes.Black, 70, yPos + incLine);
    					e.Graphics.DrawString(lista2[n], fte, Brushes.Black, 130, yPos + incLine);
    					incLine += 22;
    					count2++;
    					itempage2++;
    
    					if (itempage2 == 35) {
    						PaginaNumero++;
    						e.HasMorePages = n < lista2.Count;
    						return;
    					}
    				}
    				e.HasMorePages = false;
    			}
    		}

    Agredeceré su gran ayuda, les saluda.

    MLiranzo


    MLiranzo


    • Editado MLiranzo viernes, 27 de marzo de 2020 2:27
    viernes, 27 de marzo de 2020 0:38

Todas las respuestas

  • Hola MLiranzo, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso. 

      

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

      

      

    Oystein Edwards 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    miércoles, 1 de abril de 2020 1:38
    Moderador