DO pdf
IF !pdf.autoSetup()
WITH pdf
.oGS.cPrinter = "postscript printer"
.oGS.cGSFolder = "ubicacion de gs32dll.dll
.oXPS.cPrinter = "Impresora XPS"
ENDWITH
pdf.cMode = "XPS" && o "GS" para usar Ghostscript
ENDIF
IF NOT pdf.create("salida.pdf", "reporte.frx", "cursorDatos")
MESSAGEBOX(pdf.cError)
RETURN
ENDIF
IF pdf.oGS.isAvailable()
MESSAGEBOX("El modo Ghostscript esta disponible")
ENDIF
IF pdf.oXPS.isAvailable()
MESSAGEBOX("El modo XPS esta disponible")
ENDIF
Gracias Victor por compartir tu trabajo, sera de gran utilidad
Hola Victor.
Primero q nada, gracias x compartir esta librería…
He querido hacer una prueba con tu librería.
Hice lo siguiente:
SET DEFAULT TO c:\pdf_VE
DO pdf
?!pdf.autoSetup() && dio .F. entonces
pdf.oGS.cGSFolder = "C:\PROGRA~2\gs\gs9.06\bin\"
pdf.ogs.cPrinter = "CutePDF Writer"
pdf.CMODE = "GS"
pdf.create("salida.pdf", "d:\FcContinua\Factura.frx", "d:\FcContinua\Factura.dbf") && no funcionó…
?!pdf.autoSetup() && sigue dando .F.
Consulté el método de descripción de error y dio lo siguiente:
Pdf.cError == Selected mode is not available at this time. Make sure your configurations is valid
Saludos.
Esteban.
DO pdf
IF NOT pdf.autoSetup()
IF NOT pdf.oGS.isAvailable()
?"GS", pdf.oGS.cError
ENDIF
IF NOT pdf.oXPS.isAvailable()
?"XPS", pdf.oXPS.cError
ENDIF
ENDIF
pdf.oGS.cGSFolder = "C:\PROGRA~2\gs\gs9.06\bin"
pdf.oGS.cPrinter = "Cute PDF Writer"
IF pdf.oGS.isAvailable()
?"GS is available!"
ELSE
?"GS", pdf.oGS.cError
ENDIF
Te cuento.
Baje la modificación al ejecutar Test dio el primer error q no puedo abrir la tabla test
Suspendí la ejecución y abrí manualmente la tabla test y luego hice q continúe la ejecución y paró nuevamente casi al terminar
Y me armó un pdf q adjunto.
Luego ejecuté:
DO pdf
IF NOT pdf.autoSetup()
IF NOT pdf.oGS.isAvailable()
?"GS", pdf.oGS.cError
ENDIF
IF NOT pdf.oXPS.isAvailable()
?"XPS", pdf.oXPS.cError
ENDIF
ENDIF
pdf.oGS.cGSFolder = "C:\PROGRA~2\gs\gs9.06\bin"
pdf.oGS.cPrinter = "Cute PDF Writer"
IF pdf.oGS.isAvailable()
?"GS is available!"
ELSE
?"GS", pdf.oGS.cError
ENDIF
Y me puso en el Screen: GS Property oGS.cPrinter is empty
Luego quise hacer un pdf yo utilizando la librería y no me funcionó.
Saludos.
Esteban.
DO TEST
Saludos
Victor
IF NOT pdf.create("AAAAAASalida.pdf", "report2.frx", "cur_ItemsACotizar")
MESSAGEBOX(pdf.cError)
MESSAGEBOX(pdf.lError)
RETURN
ENDIF
y, a juzgar por el icono y tiempo de espera y porque no se muestra ninguno de los MESSAGEBOX(), entiendo que la librería trabaja pero el archivo "AAAAAASalida.pdf" y no aparece en toda la máquina.
Hola Victor, me dice que los métodos GS y XPS, no están disponible.Que debo hacer si deseo usar el XPS.
Saludos cordiales.Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
+(505) 8 999 8950Managua, NicaraguaCentroamérica
Victor.
Al ejecutar el Test dio lo siguiente:
Pero al querer hacer mi propio pdf no funcionó.
Hay algo q tendrías q ver, fíjate q el pdf q genera al hacer el test q es el q adjunto es de muy baja calidad.
Fijate si tomo tu reporte y lo envío a mi impresora pdf sin utilizar tu librería, observá la calidad del reporte, es completamente diferente. (Test.pdf). Es algo p mejorar.
Saludos.
Esteban.
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Victor Espina
Enviado el: sábado, 02 de mayo de 2015 06:17 p.m.
Para: publice...@googlegroups.com
CC: er...@yahoo.com.ar
Asunto: Re: [vfp] Nueva libreria para generar PDFs
Esteban, por lo visto olvide actualizar el PDF.PRG en el RAR antes de subirlo. Por favor, descargalo de nuevo y vuelve a intentar. El mensajde "GS Property oGS.cPrinter is empty" ocurre despues del proceso de autoSetup, porque la libreria no fue capaz de autoconfigurar el modulo GS, aunque si logro configurar el modulo XPS y por eso fue posible generar el PDF.
DO TEST
Saludos
Victor
DO pdf
pdf.autoSetup()
pdf.oGS.cPrinter = "CutePDF Writer"
IF NOT pdf.create("test_gs.pdf", "test.frx", "test.dbf")
?pdf.cError
ELSE
?"Funciono!!"
ENDIF
...
Primer Pedido, resultado “Funciono!!”
Segundo Pedido
Saludos.
Esteban.
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Victor Espina
Enviado el: sábado, 02 de mayo de 2015 08:00 p.m.
Para: publice...@googlegroups.com
CC: er...@yahoo.com.ar
Asunto: Re: [vfp] Nueva libreria para generar PDFs
Ok. El resultado del test muestra claramente que la libreria no esta siendo capaz de encontrar una impresora Postscript para usar en el modo GS, por lo que solo genera el PDF en el modo XPS. El tema de la resolucion se puede controlar usando la propiedad cResolution de los objetos oGS o XPS, pero estaba configurada a 300dpi por omision. Hice el cambio para iniciarlizarla en 600dpi por omision e implemente ese parametro en el conversor XPS, por lo que ahora ambos metodos deben generar PDFs a 600dpi por defecto.
Descarga de nuevo el RAR e intenta probar con este codigo a ver si te genera el PDF en modo GS tambien:
DO pdf
pdf.autoSetup()
pdf.oGS.cPrinter = "CutePDF Writer"
IF NOT pdf.create("test_gs.pdf", "test.frx", "test.dbf")
?pdf.cError
ELSE
?"Funciono!!"
ENDIF
Si te funciona, por favor ejecuta esto en la ventana de comandos de tu VFP y capturas la pantalla y me la envias:
CLEAR
LOCAL ARRAY xa
APRINTERS(xa,1)
DISP MEMO LIKE xa
Con esa informacion deberia ser capaz de entender porque la libreria no esta detectando la impresora CutePDF Writer.
Saludos
Victor
El sábado, 2 de mayo de 2015, 17:38:35 (UTC-4), Esteban H escribió:
Victor.
Al ejecutar el Test dio lo siguiente:
Pero al querer hacer mi propio pdf no funcionó.
Hay algo q tendrías q ver, fíjate q el pdf q genera al hacer el test q es el q adjunto es de muy baja calidad.
Fijate si tomo tu reporte y lo envío a mi impresora pdf sin utilizar tu librería, observá la calidad del reporte, es completamente diferente. (Test.pdf). Es algo p mejorar.
Saludos.
Esteban.
DO TEST
Saludos
Victor
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Victor Espina
Enviado el: viernes, 01 de mayo de 2015 08:13 p.m.
Para: publice...@googlegroups.com
Asunto: [vfp] Nueva libreria para generar PDFs
Amigos, les comparto una libreria que termine hoy, la cual permite generar representaciones en PDF de cualquier reporte normal de Fox. Lo novedoso de esta libreria es que puede trabajar tanto usando el modo normal con Ghostscript, como usando la impresora XPS Document Writer que viene de fabrica con Windows. En modo XPS no se requiere instalar ninguna libreria ni impresora; solamente usar la impresora XPS Document Writer de Windows.
Pueden bajar la libreria desde aqui:
Para usar, coloquen el siguiente codigo al inicio de su programa principal:
DO pdf
IF !pdf.autoSetup()
WITH pdf
.oGS.cPrinter = "postscript printer"
.oGS.cGSFolder = "ubicacion de gs32dll.dll
.oXPS.cPrinter = "Impresora XPS"
ENDWITH
pdf.cMode = "XPS" && o "GS" para usar Ghostscript
ENDIF
La rutina autoSetup() intenta encontrar automaticamente las dependencias que necesita para cada metodo de conversion a PDF y luego selecciona el modo que este disponible (XPS o GS), priorizando XPS. Esto quiere decir que si la rutina detecta que la generacion de PDF via XPS esta disponible, se configurara automaticamente para ese modo aun cuando el modo GS tambien este disponible.
...
...
Funcionó!!!
Mensaje del test:
pdf.create("test_gs.pdf", "test.frx", "test.dbf")
y adjunto Pdf Creado.
Saludos.
Esteban.
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Victor Espina
Enviado el: sábado, 02 de mayo de 2015 09:57 p.m.
Para: publice...@googlegroups.com
CC: er...@yahoo.com.ar
Asunto: Re: [vfp] Nueva libreria para generar PDFs
Ya vi por que no reconoce el CutePDF Writer. Por favor, baja de nuevo el RAR y corre de nuevo el test para ver si ahora funciona el modo GS tambien.
Saludos
Victor
El sábado, 2 de mayo de 2015, 19:35:59 (UTC-4), Esteban H escribió:
Primer Pedido, resultado “Funciono!!”
Segundo Pedido
Saludos.
Esteban.
DO TEST
Saludos
Victor
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Victor Espina
Enviado el: viernes, 01 de mayo de 2015 08:13 p.m.
Para: publice...@googlegroups.com
Asunto: [vfp] Nueva libreria para generar PDFs
Amigos, les comparto una libreria que termine hoy, la cual permite generar representaciones en PDF de cualquier reporte normal de Fox. Lo novedoso de esta libreria es que puede trabajar tanto usando el modo normal con Ghostscript, como usando la impresora XPS Document Writer que viene de fabrica con Windows. En modo XPS no se requiere instalar ninguna libreria ni impresora; solamente usar la impresora XPS Document Writer de Windows.
Pueden bajar la libreria desde aqui:
Para usar, coloquen el siguiente codigo al inicio de su programa principal:
DO pdf
IF !pdf.autoSetup()
WITH pdf
.oGS.cPrinter = "postscript printer"
.oGS
...
...
DO pdf
pdf.autoSetup()
pdf.isModeAvailable("GS")
?pdf.cError
pdf.isModeAvailable("XPS")
?pdf.cError
...
DO pdf
pdf.autoSetup()
pdf.isModeAvailable("GS")
?pdf.cError
pdf.isModeAvailable("XPS")
?pdf.cError
...
...
do pdf
pdf.autoSetup()
?"PSPrinter", pdf.oGS.cPrinter
?"GSDLL", pdf.oGS.cGSFolder
?"XPSPrinter", pdf.oXPS.cPrinter
?"GXPS", pdf.oXPS.cGXPS
?"CURDIR", CURDIR()
...
...
...
...
...
Amigos, les comparto una libreria que termine hoy, la cual permite generar representaciones en PDF de cualquier reporte normal de Fox. Lo novedoso de esta libreria es que puede trabajar tanto usando el modo normal con Ghostscript, como usando la impresora XPS Document Writer que viene de fabrica con Windows. En modo XPS no se requiere instalar ninguna libreria ni impresora; solamente usar la impresora XPS Document Writer de Windows.Pueden bajar la libreria desde aqui:Para usar, coloquen el siguiente codigo al inicio de su programa principal:
DO pdf
IF !pdf.autoSetup()
WITH pdf
.oGS.cPrinter = "postscript printer"
.oGS.cGSFolder = "ubicacion de gs32dll.dll
.oXPS.cPrinter = "Impresora XPS"
ENDWITH
pdf.cMode = "XPS" && o "GS" para usar Ghostscript
ENDIF
La rutina autoSetup() intenta encontrar automaticamente las dependencias que necesita para cada metodo de conversion a PDF y luego selecciona el modo que este disponible (XPS o GS), priorizando XPS. Esto quiere decir que si la rutina detecta que la generacion de PDF via XPS esta disponible, se configurara automaticamente para ese modo aun cuando el modo GS tambien este disponible.
Luego, para generar un PDF a partir de un reporte:
IF NOT pdf.create("salida.pdf", "reporte.frx", "cursorDatos")
MESSAGEBOX(pdf.cError)
RETURN
ENDIFEn cualquier momento podemos verificar que modos estan disponibles:
IF pdf.oGS.isAvailable()
MESSAGEBOX("El modo Ghostscript esta disponible")
ENDIF
IF pdf.oXPS.isAvailable()
MESSAGEBOX("El modo XPS esta disponible")
ENDIFNOTA IMPORTANTE:Cuando la rutina intenta configurar automaticamente el modo XPS, procede a crear el archivo GXPS.EXE si el mismo no existe en la ruta actual. Ese archivo es requerido para convertir un archivo XPS en PDF y es perfectamente seguro.Espero les sea de utilidad.SaludosVictor Espina
Hola Víctor.
Viendo ahora las modificaciones q has hecho, se ha simplificado la detección de las impresoras, pero siempre dejando como prioridad la XPS.
Ahora si yo quisiera hacer todo manual, dado q me gusta la definición de impresión q da la impresora GS, como sería la sintaxis a usar sin usar el Test.
Sería algo así:
DO pdf
pdf.isModeAvailable("GS")
?pdf.cError
pdf.oGS.cGSFolder = "C:\PROGRA~2\gs\gs9.06\bin\"
pdf.ogs.cPrinter = "CutePDF Writer"
pdf.CMODE = "GS"
Me gustaría tener tu consejo de cómo hacer en forma manual la configuración.
Saludos.
Esteban.
DO pdf
IF NOT pdf.oGS.autoSetup()
?"La generacion de PDF por GS no esta disponible"
RETURN
ENDIF
pdf.cMode = "GS"
DO pdf
pdf.oGS.cGSFolder = "ruta a la carpeta GS"
pdf.oGS.cPrinter = "Impresora PS"
pdf.cMode = "GS"
DO pdf
pdf.oGS.cGSFolder = "ruta a la carpeta GS"
IF NOT pdf.oGS.autoSetup()
?"No se encontro una impresora Postscript para la generacion de PDFs"
ENDIF
Gracias Victor.
En la última versión q subiste igualmente ha mejorado mucho la calidad del pdf en XPS y ni hablar de no necesitar nada instalado p poder generarlo.
Seguiré atento a los avances q irás haciendo a la librería con las pruebas de los demás.
Saludos.
Esteban.
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Victor Espina
Enviado el: jueves, 07 de mayo de 2015 08:37 p.m.
Para: publice...@googlegroups.com; er...@yahoo.com.ar
CC: er...@yahoo.com.ar
Asunto: Re: [vfp] Nueva libreria para generar PDFs
Fijate, en teoria seria asi:
pdf.oOptions.cOwnerPwd = "password"
pdf.oOptions.oGSOptions.Add("opcion GS")
pdf.oOptions.cKeyLength = "128"
pdf.oOptions.cEncryptionR = "3"
pdf.oOptions.cPermissions = "-3904"
pdf.oOptions.cOwnerPwd = ""
pdf.oOptions.cUserPwd = ""
Gracias Víctor.
Saludos.
Esteban.
Eres un crack Víctor! voy a probarlo en cuanto pueda.
Saludos Victor