Power Builder - Guardar un DW composite en formato PDF

   
Vista:

Guardar un DW composite en formato PDF

Publicado por Diego E (5 intervenciones) el 18/12/2009 13:42:10
Buen dia a todos! Necesito en forma urgente saber como guardar un dw composite compuesto por 3 datawindows... ya trabajé desarrollé un codigo que me funciona muy bien con datawindows simples pero al aplicar a un dw composite no me genera el PDF.

El codigo para DW simples es el siguiente:

//CONVIERTE Y GUARDA EL DW A PDF
string ls_archivo
integer li_ret
ls_archivo = 'nc'+string(ll_doc)+'.pdf'
dw_print.Object.DataWindow.Export.PDF.Method = XSLFOP! dw_print.Object.DataWindow.Export.PDF.xslfop.Print="no"
li_ret = dw_print.SaveAs('\\server\c$\Pegasus 2001\NC\'+ls_archivo,PDF!,true)

COMO HABIA DICHO ESTE CODIGO FUNCIONA PERFECTAMENTE PARA DW SIMPLES PERO NO PARA DW COMPOSITE....

POR FAVOR AGUARDO SU AYUDA!!!

DESDE YA MUCHAS GRACIAS!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Guardar un DW composite en formato PDF

Publicado por miguell (108 intervenciones) el 18/12/2009 14:56:52
no sé si te valdrá, pero si te bajas un 'cute pdf writer' que es gratis:

http://download.cnet.com/CutePDF-Writer/3000-6675_4-10206470.html

o otro nuevo que ha salido (no lo he probado):
http://download.cnet.com/PDFill-PDF-and-Image-Writer-Free/3000-18497_4-10432936.html

te aparecerá como impresora en windows con la propiedad que cuando imprimes hacia el, se guarda la impresión como pdf en vez de salir por impresora.

Por lo tanto en código:
-----------------------------
-guardas la impresora que esté como por defecto en windows en una variable tipo string.
-cambias la impresora por defecto a la de cute pdf writer
-haces un dw_print.Print()
-restauras la impresora por defecto a la que tienes guardado en variable string.

espero que te sirva,
saludos,
Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por Diego E (5 intervenciones) el 18/12/2009 15:11:28
Gracias Miguell, entiendo, lo habia pensado pero lo que me traba es lo siguiente, yo necesito guardar el archivo generado en PDF con un nombre especifico, por darte un ejemplo: OP+'Numero de factura'+ .PDF.. y guardarlo en una carpeta de mi servidor.. lo de direccionar donde guardar es facil.. pero asignarle el nombre es mas dificil..

Lo necesito asi por que luego de guardar en PDF el archivo se adjunta a un mail y se envia.. y al hacer el attachment busca el nombre OP+'Numero de factura'+ .PDF que se asignó antes.. no se si me explico.

Mi codigo completo es el, siguiente:

//CONVIERTE Y GUARDA EL DW A PDF
string ls_archivo
integer li_ret
ls_archivo = 'nc'+string(ll_doc)+'.pdf'
dw_print.Object.DataWindow.Export.PDF.Method = XSLFOP!
dw_print.Object.DataWindow.Export.PDF.xslfop.Print="no"
li_ret = dw_print.SaveAs('\\server\c$\Pegasus 2001\NC\'+ls_archivo,PDF!,true)

//PARA ENVIAR POR EMAIL

if cbx_1.checked = true then

MailSession mSes
MailReturnCode mRet
MailMessage mMsg

//Crea la Session

MSes = create mailSession

//Verifica la Session

MRet = mSes. MailLogon(mailNewSession!)

IF mRet <> mailReturnSuccess! THEN
MessageBox("Mail", "Logon failed. ")
RETURN
END IF

//CARGA EL MAIL

mMsg.Subject = 'Nota de Crédito - Interdenim S.A.'
MMsg.NoteText = ' _ '
messagebox('aviso', ls_archivo)

//Adjunta el archivo y el destinatario

string ls_destin
MMsg. AttachmentFile[ 1].Pathname = '\\server\c$\Pegasus 2001\NC\'+ls_archivo
ls_destin = dw_print.getItemstring(1,'clientes_email')
mMsg.Recipient[1].Name = ls_destin

// Envia el correo

MRet = mSes. MailSend(mMsg)

IF mRet <> mailReturnSuccess! THEN
MessageBox("Envío de Correo", "Correo no enviado")
mSes. MailLogoff()
DESTROY mSes
RETURN

Else
MessageBox("Envío de Correo", "Envío de Correo Satisfactorio")
END IF

MSes. MailLogoff()

DESTROY mSes

end if
//HASTA ACA ENVIO DE MAIL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por miguell (108 intervenciones) el 18/12/2009 15:52:21
antes de nada:
¿has intentado de comentar éstas 2 líneas que tienes?
dw_print.Object.DataWindow.Export.PDF.Method = XSLFOP!
dw_print.Object.DataWindow.Export.PDF.xslfop.Print="no"

El saveAs() lo que hace es guardar las columnas del select del datawindow. En el caso de un dw compuesto eso simplemente no va me parece ( al no haber select). Has probado si otros formatos sí van bien??

sobre el anterior mensajito: Dices que el problema es que tienes que guardarlo directamente con un nombre determinado:
----------------------------------------------------------
el segundo link que pusé "PDFill" parece tener opciones de evitar que salga un dialogo que te pide donde guardar y con qué nombre.
Ponen lo siguiente:
"Output options with default folder, file name and print job name to hide the Save-as dialog; You can set all the options in the registry keys programmatically."
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por Diego E (5 intervenciones) el 18/12/2009 16:24:12
El problema es que yo necesito indefectiblemente asignarle el nombre con el nro de factura....

Este codigo hace todo que quiero pero tengo un problema con el archivo generado.. me genera un archivo PDF, pero con error, el archivo tiene 0 kB.. no puedo abrir el PDF...

//CONVIERTE Y GUARDA EL DW A PDF

string ls_archivo
integer ls_pago
ls_pago = cdw_2.getitemnumber(v_temp, 'pagos_nro_pago')
Integer li_ret
String Nombre_Fichero
dw_op.Object.DataWindow.Export.PDF.Method = Distill!
dw_op.Object.DataWindow.Printer = "PDFSave"
dw_op.Object.DataWindow.Export.PDF.Distill.CustomPostScript="Yes"
ls_archivo = 'OP'+string(ls_pago)+'.pdf'
li_ret=dw_op.SaveAs('\\server\c$\pegasus 2001\OP\'+ls_archivo, PDF!, true)


//PARA ENVIAR POR EMAIL

MailSession mSes
MailReturnCode mRet
MailMessage mMsg

//Crea la Session

MSes = create mailSession

//Verifica la Session

MRet = mSes. MailLogon(mailNewSession!)

IF mRet <> mailReturnSuccess! THEN
MessageBox("Mail", "Logon failed. ")
RETURN
END IF

//CARGA EL MAIL

mMsg.Subject = 'Orden de Pago a Proveedores - Interdenim S.A.'
MMsg.NoteText = ' - '

//Adjunta el archivo y el destinatario

string ls_destin
MMsg. AttachmentFile[ 1].Pathname = '\\server\c$\Pegasus 2001\OP\'+ls_archivo
ls_destin = cdw_2.getItemstring(v_temp,'proveedores_email')
mMsg.Recipient[1].Name = ls_destin

// Envia el correo

MRet = mSes. MailSend(mMsg)

IF mRet <> mailReturnSuccess! THEN
MessageBox("Envío de Correo", "Correo no enviado")
mSes. MailLogoff()
DESTROY mSes
RETURN

Else
MessageBox("Envío de Correo", "Envío de Correo Satisfactorio")
END IF

MSes. MailLogoff()

DESTROY mSes

//HASTA ACA ENVIO DE MAIL

MUCHISIMAS GRACIAS POR TU AYUDA MIGUEL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por miguell (108 intervenciones) el 18/12/2009 17:49:31
con respeto a tu impresión del pdf tal como lo estás haciendo, no sé qué es lo que le puede pasar. Ya te dijé que me parece que simplemente no es posible hacer un saveAs con un datawindow compuesto. Si estoy equivocado, que me corrigan.
De todas formas, prueba primero hacer un saveAs como por ejemplo texto o excel y mira si eso da alguna información más.

A ver con lo que te dijé en la anterior respuesta:
usando el pdf writer ese, puedes asignar tu mismo el nombre antes de imprimir, hay opciones a la pdf writer que evitan que salgan dialogos y tu mismo puedes asignar un valor en el registro de windows para determinar el nombre que se usará al imprimir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por Elian (2 intervenciones) el 23/12/2009 12:57:46
para utilizar el metodo distiller debes
Instalar el GNU GostScrip
puedes bajarlo de;
http://prdownloads.sourceforge.net/ghostscript
por ello te genera un pdf de 0kb
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por Elian (2 intervenciones) el 23/12/2009 12:57:47
para utilizar el metodo distiller debes
Instalar el GNU GostScrip
puedes bajarlo de;
http://prdownloads.sourceforge.net/ghostscript
por ello te genera un pdf de 0kb
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por Diego E (5 intervenciones) el 23/12/2009 14:32:51
Buen dia Elian! gracias por tu ayuda!! baje el GNU ghostscript y todavia me genera un archivo de 0kB..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Guardar un DW composite en formato PDF

Publicado por Diego E (5 intervenciones) el 23/12/2009 15:35:09
Ya está!! ya me genera el archivo! lo que hice fue copiar todo el contenido de la carpeta Archivosdeprograma/gs/bin y pegué en system32... y despues de eso me funcionó perfectamente!!

Gracias por la ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar