Gracias Antonio y Carlos,
Antonio,
Al código que indicas lo puse primero en el archivo "C" y ahora en un PRG donde guardo mis funciones.
- Code: Select all Expand view
//-----------------------------------------------------------------------------------------
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
#ifdef __XHARBOUR__
#define hb_parvnl( x, y ) hb_parnl( x, y )
#define hb_storvnl( v, x, y ) hb_stornl( v, x, y )
#endif
HB_FUNC( DIBTOSTR ) // ( hDib ) --> lSuccess
{
long lSize;
char * pDib;
#ifndef _WIN64
pDib = DibToStr( ( HGLOBAL ) hb_parnl( 1 ), &lSize );
#else
pDib = DibToStr( ( HGLOBAL ) hb_parnll( 1 ), &lSize );
#endif
hb_retclen( pDib, lSize );
hb_xfree( ( void * ) pDib ); // aqui !!!
}
#pragma ENDDUMP
//-----------------------------------------------------------------------------------------
Te comento que al archivo rich lo armo automáticamente desde mi aplicación (y se puede editar), pero como decía, lo armo con datos sacados de una DBF y CREO QUE AHÍ PUEDE ESTAR EL ERROR. Porque si este archivo es reemplazado por una captura de un .DOC (por ej.), luego se exporta sin problemas a PDF.
Creería que cuando armo el texto del rich con los datos de la DFB, se le estaría pasando algún caracter que no corresponda. Pero si esto fuera así, no podría visualizarse tampoco en el/los .EMF que genera y, como verás en el video, SI SE VISUALIZA/N EL/LOS .EMF GENERADO/S
El código con el que armo el texto del rich es el siguiente:
- Code: Select all Expand view
local cPrueba:=(" Por la reparación del "+alltrim(cArtefacto)+" modelo "+alltrim(cModelo)+", serie "+;
alltrim(cSerie)+", perteneciente a "+alltrim(cNombre)+", con domicilio en "+alltrim(cDireccion)+;
", se presupuesta la suma de
"+NumToCadena(val(cPresu),"pesos",.t.)+"."+renglon+renglon+;
" "+cDetalleTA+renglon+renglon+;
" Falla debida, en un alto grado de posibilidad, a
una descarga atmosférica."+renglon+renglon+;
" Este presupuesto tiene validez por 72 horas y
mientras que el artefacto no sea retirado"+;
" de nuestro taller y está circunscripto al cambio de las
partes anteriormente mencionadas."+renglon+renglon+;
" Ya que los repuestos a utilizar son de origen
extranjero, este presupuesto está sujeto a"+;
" variación de acuerdo a cotización de los repuestos y
disponibilidad de los mismos por parte"+;
" de la Empresa importadora, a utilizar en el momento
de aceptación del mismo."+renglon+renglon+;
" Se extiende el presente a solicitud del propietario
del aparato, a los "+;
NumToCadena(val(substr(dtoc(date()),1,2)),,.f.)+" días
del mes de "+NumToMes(month(date()))+;
" de
"+NumToAno(year(date()))+"."+renglon+renglon+renglon+;
"SON: $"+alltrim(cPresu) )
oRichPRESUPUESTOS:LoadFromRTFFile(cLocalServer+"\rtf\presu.rtf")
oRichPRESUPUESTOS:GoToLine(2)
oRichPRESUPUESTOS:SetAlign(3)
oRichPRESUPUESTOS:SetUnderline(.t.)
oRichPRESUPUESTOS:SetBold(.t.)
oRichPRESUPUESTOS:SetFontSize(16)
oRichPRESUPUESTOS:InsertRTF("PRESUPUESTO - ref "+alltrim(cTalon)+renglon+renglon)
oRichPRESUPUESTOS:SetUnderline(.f.)
oRichPRESUPUESTOS:SetBold(.f.)
oRichPRESUPUESTOS:SetFontSize(11)
oRichPRESUPUESTOS:SetAlign(2)
oRichPRESUPUESTOS:InsertRTF("San Nicolás, "+dtoc(date())+renglon+renglon)
oRichPRESUPUESTOS:SetAlign(1)
oRichPRESUPUESTOS:GoToLine(7)
oRichPRESUPUESTOS:InsertRTF(cPrueba)
Hice un video en el que se ve el error con los rich's armados mediante el código anterior y en el se ve que
puede editarse el archivo .EMF generado pero cuando sigue la ejecución luego del msginfo, en el aEval, ahí se "bloquea".
También se ve que si al contenido del rich lo reemplazo con una captura de un DOC, NO HACE LA FALLA.
EL video está en:
http://youtu.be/LWdBL191l40Para poder controlar los .EMF, incluí el siguiente código en el prv2pdf.prg y antes del "AEval( oDevice:aMeta, { | cMeta | oPdf:AddMeta( cMeta ) } )"
- Code: Select all Expand view
AEval( oDevice:aMeta, { | cMeta | Tracelog( "cMeta:" + cMeta ) } ) // by rolo
msginfo("Pasado al log") // by rolo
AEval( oDevice:aMeta, { | cMeta | oPdf:AddMeta( cMeta ) } )
La verdad estoy desconcertado, sobre todo porque en W7 funciona lo más bien.
Seguiré buscando pero se "bloquea" en la línea "AEval( oDevice:aMeta, { | cMeta | oPdf:AddMeta( cMeta ) } )" del prv2pdf.prg
Saludos
Rolando