No puedo imprimir un bitmap con printer

Post Reply
fleal
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

No puedo imprimir un bitmap con printer

Post by fleal »

Buenas las tengas...

Tengo el siguiente código

local cLogo := "c:\Docs\FORMATO.bmp"

PRINTER oPrn PREVIEW

PAGE


oPrn:SayBitmap(0,0,cLogo) --> El preview me muestra un bitmap muuuuy pequeño.

He intentado usar esto, donde 486x630 son las dimensiones en pixeles del bitmap.. pero sale igual.

oPrn:SayBitmap(0,0,cLogo,486,630)

En _ ninguno me muestra el bitmap del tramaño real... ¿Qué estoy haciendo mal?


Gracias
Fernando
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Fernando,

Si revisas el ejemplo samples\TestPrn2.prg y cambias esta línea:

oPrn:SayBitmap( 1, 1, "..\bitmaps\fivewin.bmp", 600, 800 )

poniendo 600 y 800, verás como cambia de tamaño en el preview.
regards, saludos

Antonio Linares
www.fivetechsoft.com
fleal
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Post by fleal »

Ahhh, ya veo. El bitmap se va ajustando a la anchura y altura.
Al final lo he dejado así.

oPrn:SayBitmap( 1, 1, "..\bitmaps\Formato.bmp", 486*6, 630*6 )

Pero el bitmap se deforma por que es más pequeño. Necesito que sea más grande para llenar el fondo.

¿Hay alguna forma de imprimir un BMP directo sin tener que adivinar la anchura y la altura?, lo que pasa es que no estoy seguro a que se refieren esos dos parámetros. Por que veo que no son la medida en pixeles de un BMP.

A mí me dieron un BMP que contiene un formato para ser llenado con los datos de una base... asi que meto el BMP como fondo y por medio de cmsay( ) imprimo los datos y listo... sale el formato impreso con los datos.

¿Alguna otra idea?

Gracias
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

fleal wrote:Ahhh, ya veo. El bitmap se va ajustando a la anchura y altura.
Al final lo he dejado así.

oPrn:SayBitmap( 1, 1, "..\bitmaps\Formato.bmp", 486*6, 630*6 )
No lo puedes dejar asi, porque el 3er y 4to parametro te indican el ancho y el alto del bitmap EN PUNTOS DE IMPRESORA.... pero ojo, si cambias de impresora se fastidia el invento porque las distintas impresoras tienen distintas resoluciones asi que en cada impresora se vera de distinto tamaño el bitmap.

La solucion es pasar las coordenadas a una unidad estandar, por ejemplo centimetros, para esto puedes hacer usando el metodo Cmtr2Pix() de la clase printer. por ejemplo si quieres que el logo mida 5 cm X 5 cm tendras que hacer esto:

aCoords := oPrn:Cmtr2Pix(5,5)

Esto te devuelve un array de 2 posiciones con el equivalente en puntos DE LA IMPRESORA QUE ESTAS USANDO en los pixeles correspondientes y ahora si, ya puedes pasar las coordenadas correctas:

aCoords := oPrn:Cmtr2Pix(5,5)
oPrn:SayBitmap( 1, 1, "..\bitmaps\Formato.bmp", aCoords[1],aCoords[2])
Saludos
R.F.
pacotre
Posts: 40
Joined: Fri Jan 10, 2014 10:38 am

Re: No puedo imprimir un bitmap con printer

Post by pacotre »

Hola:
Sobre el ajuste del gráfico a la página, en mi caso lo he resuelto así: nhz=oprn:nHorzres()-(oprn:nHorzres()/3.0), dándole al jpg el tamaño deseado en horizontal y sin tocar el vertical. El resultado es que yo deseaba.

Tengo un prblema extraño que no consigo aclararme con con imágenes Jpg. Tengo un prg de tratamiento de fotos y lo mando a imprimir a Printafoto.prg y lo hace perfecto, pero a llamar a ese prg desde otro módulo distinto donde he abierto PRINT oprn NAME "GRAFICOS" preview, hago varias cosas y al final, antes del ENDPRINT llamo a Printafoto al que previamente he quitado su propio PRINT/ENDPRINT ya que lo controla el otro.
Pues aquú me da el siguiente error:

Class: 'NIL' has no exported method: NHORZRES
Args:
[ 1] = U

No consigo averiguar por qué me da este error. Alguna luz)

Este es el prg (parte de él) que si el dbf abierto es "FOTOS" lo hace perfectamente creando y cerrando PRINT /endprint. Si no es "FOTOS" PRINT/ENDPRINT se controla desde atrás y es aquí donde se produce el error.

Function printafoto(oImage,base)
LOCAL cz:=lz:=""
Local nPage:=X:=1
Local nHz:=0
*Local oImage
Local oPrn
IF BASE="FOTOS"
PRINT oprn NAME "GRAFICOS" preview
DEFINE FONT oFont1 NAME "MS SANSERIF" Size 0, -10 of oprn
DEFINE FONT oFont2 NAME "MS SANSERIF" Size 0, -20 BOLD of oprn
DEFINE FONT oFont22 NAME "MS SANSERIF" Size 0, -20 of oprn
ENDIF
declare tbin2[adir(".\DOCUMENT\"+ALLTRIM(FINAL->NUMERO)+"\"+alltrim(final->numero)+"*.jpg")]
i=adir(".\DOCUMENT\"+ALLTRIM(FINAL->NUMERO)+"\"+alltrim(final->numero)+"*.jpg",tbin2)

for x=1 to i
fiche1=".\DOCUMENT\"+ALLTRIM(FINAL->NUMERO)+"\"+tbin2[x]
IF X+1<=I
fiche2=".\DOCUMENT\"+ALLTRIM(FINAL->NUMERO)+"\"+tbin2[x+1]
ELSE
FICHE2="FINFOT.JPG"
ENDIF
IF BASE="FOTOS"
cz=oprn:nHorzRes()/80
lz=oprn:nVertRes()/60
ENDIF
nhz=oprn:nHorzres()-(oprn:nHorzres()/3.0)
PAGE
if file(fiche1)
oImage:LoadBmp( fiche1 )
oPrn:SayImage(ln,13.3*cz, oImage,nHz,)
Endif
if file(fiche2)
oImage:LoadBmp( fiche2 )
oPrn:SayImage(ln,13.3*cz, oImage,nHz,)
oprn:Say(59* LZ,13.3*cz,"INFORME "+FINAL->NUMERO,OFONT1)
endif
ENDPAGE
X++
NEXT
pacotre
Posts: 40
Joined: Fri Jan 10, 2014 10:38 am

Re: No puedo imprimir un bitmap con printer

Post by pacotre »

Problema solucionado. He copiado la función y la he integrado en el PRINT/ENDPRINT ya abierto y listo.

Si hay otra solución mejor, pues la aplicaré si me la pasais.
Parece ser que dentro de un PRINT no admite una llamada a una función. Es así?
Gracias
Post Reply