Imprimir todas las paginas de un .TIFF

06/01/2006 - 16:26 por JPablo | Informe spam
Que tal, Estuve probando con el método GetFrameCount y ya puedo conocer el
número de hojas del archivo .tiff, el detalle ahora es que como el evento
PrintPage se ejecuta una vez por página entonces llevo un contador de las
páginas impresas; sin embargo por ejemplo si el archivo .tiff tiene 2 hojas y
el evento PrintPage se ejecuta dos veces, Siempre me imprime la primera hoja
dos veces según el valor de GetFrameCount. Yo pretendo que me imprima todas
las hojas que tiene el archivo, como podría lograr esto ??

mi código quedo así:

private void instancePrintDocument_PrintPage(object sender,
PrintPageEventArgs ev)
{
string message;
System.Drawing.Image newImage = null;

// Crear Imagen.
newImage = System.Drawing.Image.FromFile("ALGUN ARCHIVO .TIFF");

// Dibujar una imagen en la pantalla.
ev.Graphics.DrawImage(newImage, ev.Graphics.VisibleClipBounds);

//Incrementar Página Impresa.
paginaImpresa += 1; //Esta es una variable global

//Identificar si hay que imprimir una página adicional.
if ( paginaImpresa < numeroPaginasArchivo ) //numeroPaginaArchivo es
global.
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}



"Unai Zorrilla Castro" escribió:


Es sencillo obtner el numero de paginas del .tiff usando la clase Bitmap de
System.Drawing, basta crear el objeto con el path del tiff en el constructor
e invocar al método GetFrameCount con el parametro FrameDimension.Page

Saludos
Unai Zorrilla Castro

"JPablo" escribió:

> Que tal Grupo,
>
> Estoy haciendo una aplicación windows c# que imprime documentos .tiff y estoy
> utilizando la clase PrintDocument. El detalle es que si el .tiff tiene más de
> una hoja solo me imprime la Primera. Como me puedo conocer cuantas páginas
> tiene el archivo .tiff y como configurar para enviar todas las páginas a
> impresión ??
>
> O hay alguna otra forma de enviar a impresión el archivo ??
>
> Esto es parte de la Implementación:
>
> De antemano gracias
> Saludos
>
> //Preparar documento para impresión.
> instancePrintDocument = new System.Drawing.Printing.PrintDocument();
>
> //Nombre de la Impresora.
>
> instancePrintDocument.PrinterSettings.PrinterName =
> System.Configuration.ConfigurationSettings.AppSettings["MAS.PrinterName"].ToString();
>
> //Configurar Nombre del Documento a Imprimir.
> instancePrintDocument.DocumentName = "ALGUN NOMBRE";
>
> //Configurar Evento de Impresión.
> instancePrintDocument.PrintPage += new
> PrintPageEventHandler(this.instancePrintDocument_PrintPage);
>
> //Configurar Evento que indica cuando se ha terminado la impresión del
> documento.
> instancePrintDocument.EndPrint += new
> PrintEventHandler(this.instancePrintDocument_EndPrintPage);
>
> //Enviar documento a Impresión.
> instancePrintDocument.Print();
>
>
> private void instancePrintDocument_PrintPage(object sender,
> PrintPageEventArgs ev)
> {
> string message;
> System.Drawing.Image newImage = null;
>
> // Crear Imagen.
> newImage = System.Drawing.Image.FromFile("ALGUN ARCHIVO .TIFF");
>
> // Crear coordenadas para la esquina superior izquierda de la imagen.
> int x = 0;
> int y = 0;
>
> // Dibujar una imagen en la pantalla.


ev.Graphics.DrawImageUnscaled(newImage, x, y);
}
 

Leer las respuestas

#1 nelson_ll
30/01/2006 - 21:51 | Informe spam
Yo tuve el mismo problema y lo resolvi de esta forma (Lo estoy depurando
todavia espero sirva de algo, y destoy dispuesto a escuchar sugerencia
para optimizarlo) :
/* Numero pagina a imprimir 0 por default
Lo hago asi porque existe otra parte del codigo en la cual altero el
numero para imprimir solo la pagina que quiero */
private int _PageNumberPrint = 0;
// Para determinar si se deben imprimir la pagina especificada
private bool _specificPage = false;
// El archivo de ejemplo
private Image im = Image.FromFile(@"C:\43.tif");

private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
try
{
Guid objGuid=im.FrameDimensionsList[0];
FrameDimension objDimension = new FrameDimension(objGuid);
int _PageNumber = im.GetFrameCount(objDimension);
MemoryStream ms = null;
ms= new MemoryStream();
//Escoge el frame Activo a traves del numero de pagina
im.SelectActiveFrame(objDimension,_PageNumberPrint);
im.Save(ms,ImageFormat.Bmp);
Image imms = Image.FromStream(ms);
e.Graphics.DrawImage(imms,0,0);
if (_PageNumberPrint<_PageNumber-1 && _specificPage==false)
{
e.HasMorePages=true;
_PageNumberPrint++;
}
else
{
e.HasMorePages=false;
_PageNumberPrint=0;
}
imms.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

Preguntas similares