Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-05-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Post Impresion de documentos a través del canvas

Estimados colegas,

Desde que entre a este foro he podido solucionar muchos problemas gracias a la buena voluntad de los integrantes del mismo.

Por esta razón quiero corresponder con mi granito de arena con este pequeño trabajo que espero sea de utilidad.

Se que esto puede ser mejorado y agradeceré todas las críticas que se haga de él.

Cita:
A través del tiempo me he visto en la necesidad de imprimir documentos (frecuentemente Facturas) los cuales resultan hasta cierto punto complejos al utilizar reporteadores como Quick Report, Fast Report, Rave, etc.


Para solucionar este problema he utilizado el objeto TPrinter, sin embargo, al hacer uso de su propiedad Canvas, es necesario, determinar las coordenadas (pixeles) donde se van a “dibujar” los textos, cuestión que obliga a trabajar horas extras para configurar todos los campos que se desean imprimir, incluso, si por alguna razón la impresora que se utilizó para configurar el documento es reemplazada y esta no tiene la misma densidad de impresión, sería necesario volver a configurar las coordenadas del canvas para que la impresión vuelva a coincidir en el documento.


Esto no sería tan problemático si el sistema que se desarrollo solo es para un cliente y solo un documento, sin embargo, si se piensa comercializar dicho sistema los problemas crecen de manera exponencial a grado tal (pensando positivamente, claro está) que se podría convertir en un dolor de cabeza.


Por tal motivo, me di a la tarea de crear una aplicación que me ayudara a configurar documentos de una manera fácil y que me generara un archivo con las coordenadas para cada campo dentro del área de impresión y poder usar estos valores para ahorrar tiempo y esfuerzo.


La conceptualización de esta aplicación es la siguiente:

  • Utilizando un archivo plano (Confimpresion.txt) cargar los campos que van a ser impresos en el documento, para que estos sean cargados en lugares especificos dentro de la forma.
  • Generar una matriz con la definición de la impresora predeterminada a través de un StringGrid.
  • Imprimir una hoja con la misma matriz (en una copia de una factura, de preferencia) para poder determinar en que (columna, renglon) debe ir cada campo.
  • Con el concepto Drag & Drop mover los campos a la matriz correspondiente.
  • Guardar en un archivo INI, la información de las coordenadas de cada campo.


El archivo Confimpresion.txt contiene la lista de los nombre de los campos que serán impresos en el documento y su formato es <Nombre Campo>,<Longitud del campo>


Por Ejemplo


Razon Social,50
Direccion,50
Ciudad,30
Estado,30


Existen algunas condiciones dentro de los campos que se van a imprimir, exclusivamente para aquellos que requieren de imprimirse de forma detalle como son las partidas de una factura por ejemplo. Para esto es necesario que se agregue la palabra Detalle antes del campo.


Por ejemplo


Detalle Partida,10
Detalle Descripcion,50
Detalle Precio, 20
Detalle Importe,20


Esto permite que esos campos se puedan “jalar” hacia abajo para determinar cuantas lineas se podrán imprimir dentro de la Factura. Esto se hace seleccionando el campo en el StringGrid y sin soltar el mouse "jalar" hacia abajo hasta la pocision donde se desea que termine el detalle.


Para borrar algun dato que se ha puesto en una posicion incorrecta, boton derecho del mouse y click en Quitar.


El archivo INI creado se localiza en el directorio de WINDOWS y se llama CONFIMPRESION.INI el cual contiene las coordenadas de cada campo que se va a imprimir, y en el caso de los campos detalle tienen un valor adicional que corresponde al numero de lineas que se pueden imprimir.




Por ejemplo


[MATRIZ]
Razon Social=63,48 coordenadas (63,48)
Detalle Descripcion=189,160,15 coordenadas (189,160), 15 lineas
Saludos.

__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 29-05-2006 a las 23:27:45. Razón: No pude pegar el adjunto (Your file of 269,6 KB bytes exceeds the forum's limit of 29,3 KB for this filetype.)
Responder Con Cita
  #2  
Antiguo 29-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Puede que te resulte mas sencillo trabajar en milimetros que en pixels para diseñar tus facturas. Estas funciones te pasan de milimetros a pixels, midiendo los milimetros desde la esquina superior izquierda del papel. Asi solo tienes que diseñarla con un lapiz sobre una hoja de papel y luego utilizar una regla para medir

Código Delphi [-]
uses Printers;

function mmToPixelsX(X: Real): Integer;
var
  PixelsPerInchX: Integer;
  OffsetX: Integer;
begin
  PixelsPerInchX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  OffsetX := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
  Result:= Round((X / 25.4) * PixelsPerInchX) - OffsetX;
end;

function mmToPixelsY(Y: Real): Integer;
var
  PixelsPerInchY: Integer;
  OffsetY: Integer;
begin
  PixelsPerInchY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  OffsetY := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
  Result:= Round((Y / 25.4) * PixelsPerInchY) - OffsetY;
end;
Responder Con Cita
  #3  
Antiguo 29-05-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Si, de hecho la cuestion es que hice un pequeño programa que hace eso, pero no pude adjuntarlo porque esta muy grande, si tu puedes ayudarme a agregarlo para que lo vean seria mejor.

Saludos.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 29-05-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por seoane
Puede que te resulte mas sencillo trabajar en milimetros que en pixels para diseñar tus facturas. Estas funciones te pasan de milimetros a pixels, midiendo los milimetros desde la esquina superior izquierda del papel. Asi solo tienes que diseñarla con un lapiz sobre una hoja de papel y luego utilizar una regla para medir
Por cierto, precisamente el diseño es lo que quiero que se evite. Con el programita en cuestion, te da la localizacion exacta para que no tengas que estar probando a prueba y error.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Impresión de Documentos daly Varios 1 04-05-2006 19:02:00
Dudas con Impresion con Canvas lroblesco Impresión 5 24-02-2005 04:35:06
Tamaño de la Fuentes en Impresion (Canvas) MarcelRuz Impresión 3 30-04-2004 13:12:48
Impresión con Canvas en Delphi 6 MarcelRuz Impresión 4 27-04-2004 01:12:59
Sobre la impresión de documentos obiwuan Humor 0 06-05-2003 22:04:34


La franja horaria es GMT +2. Ahora son las 15:56:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi