Page 1 of 1

Imprimir JPG de fondo de documento

PostPosted: Sat Nov 19, 2005 9:46 pm
by Canarias
Hola de nuevo amigos:

Tomando el ejemplo de SAMPLES\COREL.PRG (// Using CorelDraw to generate printing templates!!!), actualmente imprimo con oPrn:ImportWMF( ".\PREIMP\PR-103-1.Wmf" ) el fondo del documento y a través de oPrn:CmSay( 7.4, 5, SUBSTR(oDbf0:CSIPF,2,10),oFont) imprimo el dato que deseo en la posición del documento, y todo va bien y perfecto.

El problema que se me presenta es que el cada fichero WMF es muy pesado (aproximadamente unos 4100 kb!!) y en cambio si es en JPG el tamaño es de solo unos 300 Kb.

Para un trámite se requiere entre 10 y 16 documentos distintos con lo cual al final la memoria se va agotando y el preview hay veces que el documento no lo carga.

Además tengo en el directorio donde tengo los impresos unos 46 documentos lo que al final el directorio de preimpresos en formato WMF ocupa ya la friolera de cerca de 200 MB!!!!.

Si estos preimpresos estuvieran en formato JPG sólo ocuparían unos 2.xMB en dicho directorio.

Pasando los documentos a formato JPG y poniendo oPrn:SayImage( ".\PREIMP\PR-103-1.jpg" )me da error al imprimir y si pongo oPrn:SayBmp( ".\PREIMP\PR-103-1.jpg" ) no da error pero tampoco lo carga.

¿Alguien puede orientar y decirme los pasos que debo realizar para poder imprimir los JPG, si es que se puede?

Saludos

PostPosted: Thu Nov 24, 2005 9:13 pm
by Canarias
Saludos a todos.

Alguna ayuda, por favor!!! o diganme si no es posible, a ver que puedo hacer entonces.

Gracias.

PostPosted: Fri Nov 25, 2005 10:30 am
by Chantiel
Bueno, como te veo un poco desesperado te comentare que voy a solidarizarme contigo.

Yo tampoco se como hacerlo, por eso no he posteado.

Te aconsejo, que este tipo de dudas las pongas tambien en el subforo de Harbour, la gente esta mas activa alli y al fin y al cabo, es una consulta general.


Nos leemos!!

PostPosted: Fri Nov 25, 2005 1:03 pm
by pymsoft
Yo se como hacerlo, pero no tengo el codigo aqui, apenas este en mi casa te contesto.

Creo que era con oPrn:SayImage(), o algo asi...

Saludos

PostPosted: Sun Nov 27, 2005 7:11 pm
by Manuel Aranda
El mismo problema tuve hace tiempo con este asunto y alguien del foro me ayudó. No puedo aclararte mucho sobre el asunto pues hace más de un año que lo implementé, pero lo más importante es que funciona. Abajo te pego unos trozos de código.
Tienes que tener freeimagen.dll en la carpeta del ejecutable. Después debes tener en el prg:

#xcommand REDEFINE Image [ <oBmp> ] ;
[ ID <nId> ] ;
[ <of: OF, WINDOW, DIALOG> <oWnd> ] ;
[ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ;
[ <file: FILE, FILENAME, DISK> <cBmpFile> ] ;
[ <lClick: ON ClICK, ON LEFT CLICK> <uLClick> ] ;
[ <rClick: ON RIGHT CLICK> <uRClick> ] ;
[ <scroll: SCROLL> ] ;
[ <adjust: ADJUST> ] ;
[ CURSOR <oCursor> ] ;
[ MESSAGE <cMsg> ] ;
[ <update: UPDATE> ] ;
[ WHEN <uWhen> ] ;
[ VALID <uValid> ] ;
=> ;
[ <oBmp> := ] TImage():ReDefine( <nId>, <cResName>, <cBmpFile>,;
<oWnd>, [\{ |nRow,nCol,nKeyFlags| <uLClick> \}],;
[\{ |nRow,nCol,nKeyFlags| <uRClick> \}],;
<.scroll.>, <.adjust.>, <oCursor>, <cMsg>, <.update.>,;
<{uWhen}>, <{uValid}> )




Para visualizar la imagen:
///////////////////////////////////////////////////////////////////////////
DEFINE DIALOG oDlg RESOURCE "IMAGEN2"
oDlg:lHelpIcon:=.F.


REDEFINE IMAGE oImagen FILENAME (cFImagen) ID 800;
OF oDlg ADJUST UPDATE //SCROLL

//
ACTIVATE DIALOG oDlg CENTER ON INIT oDlg:End()

//
Para imprimir la imagen e imprimir texto encima:
oPrn:StartPage()
//PAGE
//
IF lLImagen
oImagen:LoadImage(,cFImagen)
oPrn:SayImage( 0, 0, oImagen,4800,6800 )
ENDIF
//
IF lLTexto
cTexto:=Memoread(cFTexto)
nLineasTexto:=MlCount(cTexto,75)
//
FOR i := 1 TO nLineasTexto
cLineaActual:=MemoLine(cTexto,75,i,,.F.)
oPrn:CmSay(nLin+0.5,1, cLineaActual, oFont1)
nLin=nLin+0.5
NEXT
//
ENDIF
//
oPrn:CmSay((aF[1,1]+nDV)/10, (aF[1,2]+nDH)/10, D1, oFont1)
oPrn:CmSay((aF[2,1]+nDV)/10, (aF[2,2]+nDH)/10, D2, oFont1)
oPrn:CmSay((aF[3,1]+nDV)/10, (aF[3,2]+nDH)/10, D3, oFont1)
oPrn:CmSay((aF[4,1]+nDV)/10, (aF[4,2]+nDH)/10, D4, oFont1)
oPrn:CmSay((aF[5,1]+nDV)/10, (aF[5,2]+nDH)/10, D5, oFont1)
oPrn:CmSay((aF[6,1]+nDV)/10, (aF[6,2]+nDH)/10, D6, oFont1)
//

//ENDPAGE
oPrn:EndPage()
//

PostPosted: Sun Nov 27, 2005 10:45 pm
by Canarias
Gracias Chantiel, Pymsoft y Manuel Aranda.

Mañana lo probaré a ver si me sale y ya les comento.

Un saludo

PostPosted: Wed Nov 30, 2005 9:16 pm
by pymsoft
Bueno, tarde pero llegué:

En el lugar de la impresion donde desees imprimir tu imagen, luego de crear el objeto oPrn, etc.

cImmage := "TUIMAGEN.JPG"
nImgWidth := 540
nImgHeight := 360
nImgRaster := 8913094 // SRCAND

oImage := TImage():New( , , , , , cImmage , , oWnd )
oPrn:SayImage( 0, 0, oImage, nImgWidth, nImgHeight, nImgRaster )
oImage:end()


// DE TODO LO QUE PROBE, LO MEJOR EN nImgRaster (para lo que yo necesitaba) es hacer un SRCAND, disculpa la info en italiano, pero la busqué en esta lengua en su epoca ;-)


RASTER -->

SRCCOPY = &HCC0020 32 permette di copiare pari-pari l'intera immagine oppure una selezione della stessa
SRCAND = &H8800C6 8913094 combina i pixel dell'immagine di destinazione con quelli dell'immagine di partenza usando l'operatore Booleano AND
SRCINVERT = &H660046 6684742 combina i pixel dell'immagine di destinazione con quelli dell'immagine di partenza usando l'operatore Booleano XOR
SRCPAINT = &HEE0086 15597702 combina i pixel dell'immagine di destinazione con quelli dell'immagine di partenza usando l'operatore Booleano OR
SRCERASE = &H4400328 71303976 inverte l'immagine di destinazione e la combina con l'immagine di partenza usando l'operatore Booleano AND
WHITENESS = &HFF0062 16711778 colora di bianco l'immagine di destinazione
BLACKNESS = &H42 66 colora di nero l'immagine di destinazione


Espero que te sirva.