Page 1 of 1
No puedo imprimir un bitmap con printer
Posted: Wed Nov 30, 2005 3:19 am
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
Posted: Wed Nov 30, 2005 11:02 am
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.
Posted: Wed Nov 30, 2005 9:08 pm
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
Posted: Thu Dec 01, 2005 2:26 am
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])
Re: No puedo imprimir un bitmap con printer
Posted: Fri May 29, 2020 10:14 am
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
Re: No puedo imprimir un bitmap con printer
Posted: Fri May 29, 2020 10:56 am
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