imprimir en pdf ...

20/01/2005 - 00:59 por Raúl | Informe spam
Me gustaria saber si alguien me puede ayudar x P
lo que quiero es simple, poder imprimir unos frx
de foxpro y que los pueda guardar como pdf.

Para ello, he encontrado este codigo, que se basa en
una libreria CDINTF.DLL que crea una impresora
imprime y luego la quita, pero no me funciona,
puesto que a la hora de crear la impresora, me dice :

Error MESSAGE : No se conoce el controlador de la impresora.

Segun he visto, lo unico obligatorio es tener registrado el
CDINTF.DLL con el REGSVR32

Por si alguien quiere ver el ejemplo en ingles, esta es la URL

http://fox.wikis.com/wc.dll?Wiki~UsingAmyuniPDFConverterWithVFP~VFP

El codigo que pongo a continuacion es la prueba que hice
con ese codigo. Admito sugerencias.



RELEASE ALL
CLEAR ALL
CLOSE DATABASES ALL
DO SETS

USE LISTA IN 0 ALIAS CLISTA
SELECT CLISTA
PDF("LISTA", "PRUEBA")


***
-
*** PROGRAMA : PDF FECHA :19/01/2005
***
*** PARAMETROS :
*** - PAR_LISTADO : Nombre del report que se a de lanzar.
*** - PAR_PDF : Nombre del fichero pdf que se tiene que crear.
***
*** DEVUELVE ; .T. si lo ha podido crear o .F. si ha tenido algun
problema.
***
*** COMENTARIO :
*** Print a report to PDF format using the Amyuni PDF compatible
*** printer driver via a DLL interface.
***
*** NOTE: CDINTF.DLL must be registered on your machine (REGSVR32
CDINTF.DLL)
*** or CDINTF210.DLL ( if you're using Amyuni 2.10 )
***

FUNCTION PDF
LPARAMETERS PAR_LISTADO, PAR_PDF

#DEFINE pdf_NoPrompt 1 && do not prompt for file name
#DEFINE pdf_UseFileName 2 && use file name set by SetDefaultFileName else
use document name
#DEFINE pdf_Concatenate 4 && concatenate files, do not overwrite
#DEFINE pdf_DisableCompression 8 && disable page content compression
#DEFINE pdf_EmbedFonts 16 && embed fonts used in the input document
#DEFINE pdf_BroadcastMessages 32 && enable broadcasting of PDF events

* For Amyuni 2.10...
*#DEFINE pdf_AmyuniLicenseCompany "Company Name" && name of company
Amyuni is licensed to
*#DEFINE pdf_AmyuniLicenseCode "ABCD1234..." && license code issued by
Amyuni

IF VARTYPE(PAR_LISTADO) <> "C" && Es obligatorio el nombre de un listado
RETURN .F.
ENDIF

IF VARTYPE(PAR_PDF) <> "C" && Si no ha rellenado el nombre del
fichero, le pongo el del listado.
PAR_PDF = ALLTRIM(PAR_LISTADO) + ".PDF"
ENDIF

IF UPPER(JUSTEXT(PAR_PDF)) <> "PDF" && Sino tiene la extension PDF, se la
agrego.
PAR_PDF = PAR_PDF + ".PDF"
ENDIF

* Creo el objeto para poder disponer de una impresora virtual.
* (Amyuni PDF Compatible Printer Driver)
oPDFPrinter = CREATEOBJECT( "CDINTF.CDINTF")
*oPDFPrinter = CREATEOBJECT("CDINTFEX.CDINTFEX") && for Amyuni 2.10

IF VARTYPE(oPDFPrinter) <> "O"
RETURN .F.
ENDIF

PRIVATE ErrorCount
ErrorCount = 0

LOCAL OLD_ERROR, OLD_IMPRESORA
OLD_ERROR = ON("ERROR") && Me guardo la cfg de los errores
OLD_IMPRESORA = SET("PRINTER", 3) && y la impresora que estuviera
utilizando ...

ON ERROR DO ERRORESHANDLE


* Inicializo el driver de la impresora."PDF Compatible Printer Driver".
* ("PDF Compatible Printer Driver" no aparecera en la lista de impresoras.)
oPDFPrinter.PDFDriverInit("PDF Compatible Printer Driver") && <- AQUI ME
DA EL ERROR


* Si Amyuni PDF esta instalada, en vez de
* --> oPDFPrinter.PDFDriverInit("PDF Compatible Printer Driver")
* hay que usar --> oPDFPrinter.DriverInit( "PDF Compatible Printer
Driver")

* Fijo el destino del fichero PDF.
* Si el path esta incluido, no hay problema, sino le añado el directorio
actual.
IF PAR_PDF = JUSTFNAME(PAR_PDF)
oPDFPrinter.DefaultFileName = ADDBS(SYS(5) + SYS(2003)) + PAR_PDF
ELSE
oPDFPrinter.DefaultFileName = PAR_PDF
ENDIF

***Pongo a 1200 la resolucion del pdf
oPDFPrinter.resolution = 1200

* Actualizo el driver, para que guarde la resolucion
oPDFPrinter.SetDefaultConfig()

* Note: Message broadcasting should be enabled in order to insert
bookmarks from VFP.
* But see the notes in the AddBookmark function below!
oPDFPrinter.FileNameOptions = pdf_NoPrompt + pdf_UseFileName +
pdf_BroadcastMessages

* Vuelvo a actualizar la cfg.
oPDFPrinter.SetDefaultPrinter()

* Pongo como impresora predeterminada la "PDF Compatible Printer Driver"
SET PRINTER TO NAME "PDFDriver"

* Para la versión 2.10, se necesita lejecutar : EnablePrinter() con los
datos de la licencia.
*oPDFPrinter.EnablePrinter( pdf_AmyuniLicenseCompany,
pdf_AmyuniLicenseCode)
REPORT FORM (PAR_LISTADO) NOEJECT NOCONSOLE TO PRINTER

* Restauro la impresora predeterminada.
oPDFPrinter.RestoreDefaultPrinter()

* Restauro la rutina de errores que hubiera.
ON ERROR &OLD_ERROR

* Restauro la impresora seleccionada que tenia antes
SET PRINTER TO NAME "&OLD_IMPRESORA"

* Desinstalo el driver de la impresora.
oPDFPrinter.DriverEnd()

RETURN ErrorCount = 0



***
-
*** Adds a bookmark to the report at the current print location.
***

FUNCTION AddBookmark
PARAMETERS PageNo
*!* THIS WILL NOT WORK unless we have the actual device context (hDC)
*!* to pass as the first parameter to SetBookmark. Use the FLL interface
*!* if we need to insert bookmarks.
oPDFPrinter.SetBookmark( 0, "Test" + STR(PageNo))
RETURN ""

***
-
*** error handling: displays last error message
***
-
PROCEDURE ERRORESHANDLE
*!*? "Error message: " + LASTERRORMSG() && This syntax is only for the
FLL.
? "Error message: " + oPDFPrinter.GetLastErrorMsg() && This syntax is for
the DLL.
ErrorCount = ErrorCount + 1
RETURN



PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
 

Leer las respuestas

#1 Edhin Jiménez
20/01/2005 - 05:42 | Informe spam
Hola Raúl

Chequea este link:
http://www.fpress.com/revista/num0702/art.htm

Espero pueda ayudarte.

Saludos cordiales,

T.S.U. Edhin Jiménez
Coordinador Estatal Zulia
PortalFox Venezuela
Maracaibo, Venezuela

"Raúl" escribió en el mensaje
news:eAmT0Lo$
Me gustaria saber si alguien me puede ayudar x P
lo que quiero es simple, poder imprimir unos frx
de foxpro y que los pueda guardar como pdf.

Para ello, he encontrado este codigo, que se basa en
una libreria CDINTF.DLL que crea una impresora
imprime y luego la quita, pero no me funciona,
puesto que a la hora de crear la impresora, me dice :

Error MESSAGE : No se conoce el controlador de la impresora.

Segun he visto, lo unico obligatorio es tener registrado el
CDINTF.DLL con el REGSVR32

Por si alguien quiere ver el ejemplo en ingles, esta es la URL

http://fox.wikis.com/wc.dll?Wiki~UsingAmyuniPDFConverterWithVFP~VFP

El codigo que pongo a continuacion es la prueba que hice
con ese codigo. Admito sugerencias.



RELEASE ALL
CLEAR ALL
CLOSE DATABASES ALL
DO SETS

USE LISTA IN 0 ALIAS CLISTA
SELECT CLISTA
PDF("LISTA", "PRUEBA")


***
-
*** PROGRAMA : PDF FECHA :19/01/2005
***
*** PARAMETROS :
*** - PAR_LISTADO : Nombre del report que se a de lanzar.
*** - PAR_PDF : Nombre del fichero pdf que se tiene que crear.
***
*** DEVUELVE ; .T. si lo ha podido crear o .F. si ha tenido algun
problema.
***
*** COMENTARIO :
*** Print a report to PDF format using the Amyuni PDF compatible
*** printer driver via a DLL interface.
***
*** NOTE: CDINTF.DLL must be registered on your machine (REGSVR32
CDINTF.DLL)
*** or CDINTF210.DLL ( if you're using Amyuni 2.10 )
***

FUNCTION PDF
LPARAMETERS PAR_LISTADO, PAR_PDF

#DEFINE pdf_NoPrompt 1 && do not prompt for file name
#DEFINE pdf_UseFileName 2 && use file name set by SetDefaultFileName else
use document name
#DEFINE pdf_Concatenate 4 && concatenate files, do not overwrite
#DEFINE pdf_DisableCompression 8 && disable page content compression
#DEFINE pdf_EmbedFonts 16 && embed fonts used in the input document
#DEFINE pdf_BroadcastMessages 32 && enable broadcasting of PDF events

* For Amyuni 2.10...
*#DEFINE pdf_AmyuniLicenseCompany "Company Name" && name of company
Amyuni is licensed to
*#DEFINE pdf_AmyuniLicenseCode "ABCD1234..." && license code issued by
Amyuni

IF VARTYPE(PAR_LISTADO) <> "C" && Es obligatorio el nombre de un listado
RETURN .F.
ENDIF

IF VARTYPE(PAR_PDF) <> "C" && Si no ha rellenado el nombre del
fichero, le pongo el del listado.
PAR_PDF = ALLTRIM(PAR_LISTADO) + ".PDF"
ENDIF

IF UPPER(JUSTEXT(PAR_PDF)) <> "PDF" && Sino tiene la extension PDF, se la
agrego.
PAR_PDF = PAR_PDF + ".PDF"
ENDIF

* Creo el objeto para poder disponer de una impresora virtual.
* (Amyuni PDF Compatible Printer Driver)
oPDFPrinter = CREATEOBJECT( "CDINTF.CDINTF")
*oPDFPrinter = CREATEOBJECT("CDINTFEX.CDINTFEX") && for Amyuni 2.10

IF VARTYPE(oPDFPrinter) <> "O"
RETURN .F.
ENDIF

PRIVATE ErrorCount
ErrorCount = 0

LOCAL OLD_ERROR, OLD_IMPRESORA
OLD_ERROR = ON("ERROR") && Me guardo la cfg de los errores
OLD_IMPRESORA = SET("PRINTER", 3) && y la impresora que estuviera
utilizando ...

ON ERROR DO ERRORESHANDLE


* Inicializo el driver de la impresora."PDF Compatible Printer Driver".
* ("PDF Compatible Printer Driver" no aparecera en la lista de
impresoras.)
oPDFPrinter.PDFDriverInit("PDF Compatible Printer Driver") && <- AQUI ME
DA EL ERROR


* Si Amyuni PDF esta instalada, en vez de
* --> oPDFPrinter.PDFDriverInit("PDF Compatible Printer Driver")
* hay que usar --> oPDFPrinter.DriverInit( "PDF Compatible Printer
Driver")

* Fijo el destino del fichero PDF.
* Si el path esta incluido, no hay problema, sino le añado el directorio
actual.
IF PAR_PDF = JUSTFNAME(PAR_PDF)
oPDFPrinter.DefaultFileName = ADDBS(SYS(5) + SYS(2003)) + PAR_PDF
ELSE
oPDFPrinter.DefaultFileName = PAR_PDF
ENDIF

***Pongo a 1200 la resolucion del pdf
oPDFPrinter.resolution = 1200

* Actualizo el driver, para que guarde la resolucion
oPDFPrinter.SetDefaultConfig()

* Note: Message broadcasting should be enabled in order to insert
bookmarks from VFP.
* But see the notes in the AddBookmark function below!
oPDFPrinter.FileNameOptions = pdf_NoPrompt + pdf_UseFileName +
pdf_BroadcastMessages

* Vuelvo a actualizar la cfg.
oPDFPrinter.SetDefaultPrinter()

* Pongo como impresora predeterminada la "PDF Compatible Printer Driver"
SET PRINTER TO NAME "PDFDriver"

* Para la versión 2.10, se necesita lejecutar : EnablePrinter() con los
datos de la licencia.
*oPDFPrinter.EnablePrinter( pdf_AmyuniLicenseCompany,
pdf_AmyuniLicenseCode)
REPORT FORM (PAR_LISTADO) NOEJECT NOCONSOLE TO PRINTER

* Restauro la impresora predeterminada.
oPDFPrinter.RestoreDefaultPrinter()

* Restauro la rutina de errores que hubiera.
ON ERROR &OLD_ERROR

* Restauro la impresora seleccionada que tenia antes
SET PRINTER TO NAME "&OLD_IMPRESORA"

* Desinstalo el driver de la impresora.
oPDFPrinter.DriverEnd()

RETURN ErrorCount = 0



***
-
*** Adds a bookmark to the report at the current print location.
***

FUNCTION AddBookmark
PARAMETERS PageNo
*!* THIS WILL NOT WORK unless we have the actual device context (hDC)
*!* to pass as the first parameter to SetBookmark. Use the FLL interface
*!* if we need to insert bookmarks.
oPDFPrinter.SetBookmark( 0, "Test" + STR(PageNo))
RETURN ""

***
-
*** error handling: displays last error message
***
-
PROCEDURE ERRORESHANDLE
*!*? "Error message: " + LASTERRORMSG() && This syntax is only for the
FLL.
? "Error message: " + oPDFPrinter.GetLastErrorMsg() && This syntax is for
the DLL.
ErrorCount = ErrorCount + 1
RETURN



PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similares