PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 28 → Descargar pdf de página web
Descargar pdf de página web
Débuté par Corina, 07 juil. 2017 15:26 - 6 réponses
Posté le 07 juillet 2017 - 15:26
Buenas,

Estoy accediendo a una página web donde directamente se previsualiza un archivo pdf. ¿Existe alguna forma de poder descargar de forma automática el archivo sin tener que hacer uso de los botones del acrobat?

Gracias de antemano.
Un saludo,
Corina
Posté le 07 juillet 2017 - 17:06
Con el uso de las funciones iprint y iDestination el PDF debería descargarse en mi caso lo hace
NOTA: Revisa que el navegador dónde lo pruebas no este superponiendo el PDF como vista previa en vez de descargarlo.

Si necesitas mi implementación con gusto te la proporciono.
Saludos
Posté le 07 juillet 2017 - 17:12
Que tal Corina
Con la implementacion siguiente puedes lograrlo, sin embargo te recomiendo que revises con que navegador lo estas probando ya que algunos previsualizan este contenido en vez de descargarlo.


// Elias Ramos Cantù
// Status: Completo
// Validated: Si
// Summary: Genera el PDF descargable
// Generate a unique PDF file name
AFile is string = fWebDir() + "\" + DateSys() + TimeSys() + ".pdf"
// Configure the destination of the print
iDestination(iPDF, AFile)
// Print the RPT_OrderPDF report
iPrintReport(RPT_NoName1)
// Propose to download the file
// The file name proposed by default will be "Order.pdf"
Name is string = RPT_NoName1 + DateSys() + ".pdf"
FileDisplay(AFile, "application/pdf", Name)
// Delete the file
fDelete(AFile)


Saludos
Posté le 07 juillet 2017 - 17:12
Que tal Corina
Con la implementacion siguiente puedes lograrlo, sin embargo te recomiendo que revises con que navegador lo estas probando ya que algunos previsualizan este contenido en vez de descargarlo.


// Elias Ramos Cantù
// Status: Completo
// Validated: Si
// Summary: Genera el PDF descargable
// Generate a unique PDF file name
AFile is string = fWebDir() + "\" + DateSys() + TimeSys() + ".pdf"
// Configure the destination of the print
iDestination(iPDF, AFile)
// Print the RPT_OrderPDF report
iPrintReport(RPT_NoName1)
// Propose to download the file
// The file name proposed by default will be "Order.pdf"
Name is string = RPT_NoName1 + DateSys() + ".pdf"
FileDisplay(AFile, "application/pdf", Name)
// Delete the file
fDelete(AFile)


Saludos
Posté le 10 juillet 2017 - 12:52
Gracias por la respuesta Elias.
Efectivamente, desactivando la previsualización en el navegador se descarga el fichero de forma automática.
La intención es ir un poco más allá, en vez de descargar el archivo, lo que realmente quiero hacer es almacenar ese pdf en un campo binario para posteriormente poder manipularlo evitando así la necesidad del usuario de acceder a la página web de donde se obtuvo dicho pdf.
Podría montar un sistema que coja el fichero descargado y después almacenarlo en el campo binario, pero me preguntaba si realmente lo puedo hacer sin tener que realizar una descarga, como hacer un getvalue o algo por el estilo sobre la página web que me devolviera el pdf...

Gracias, un saludo
Corina
Membre enregistré
8 messages
Posté le 10 juillet 2017 - 18:34
Hola Corina, para realizar lo que deseas intenta implementar este algoritmo

IF HTTPRequest("http://www.pdf995.com/samples/pdf.pdf") THEN
HReset(TablaBD)
TablaBD.CampoMemo = HTTPGetResult()//Prepara información para ser almacena en la BD
IF HAdd(TablaBD) THEN
ToastDisplay("Achivo pdf descargado y almacenado exitosamente en la BD")
END
ELSE// en caso tal de que se hubiese producido un error al descargar el archivo
ToastDisplay("No se pudo descargar el archivo pdf, del sitio web suministrado")
END


//CREA UN ARCHIVO FÍSICO A PARTIR DEL LA ÚLTIMA INFORMACIÓN ADJUNTADA A LA BD
HReadLast(TablaBD)
NuevonombreArchivo is string = CompleteDir(fCurrentDir())+"ejemplo.pdf"
fSaveBuffer(NuevonombreArchivo,TablaBD.CampoMemo)//Crea archivo a partir del contenido del campo binario
IF fFileExist(NuevonombreArchivo) THEN
FileDisplay(NuevonombreArchivo, "application/pdf") //Descarga el último archivo anexado a la BD
fDelete(NuevonombreArchivo)// Evita que el servidor se sature con archivos
END


Espero sea lo que requiere, Saludos!

--
Christian D.
https://www.linkedin.com/in/cdloaiza/
https://goo.gl/ClbVWL
Posté le 12 juillet 2017 - 18:51
Christian gracias por responder, en este caso no me sirve el httgetresult()
Al final lo he resuelto pero utilizando la api wininet de windows.