Web: Cómo Descargar y Previsualizar Documentos PDF

Puede que esta sea, quizá, una de las preguntas más repetidas sobre documentos PDF en proyectos Web (aparte de la gestión de fuentes). Si te encuentras entre los interesados sobre cómo aplicar la mejor y más simple solución a estas tareas, te propongo que continúes leyendo y te mostraré cómo puedes hacerlo.

Empieza creando un proyecto Web, selecciona la página WebPage1 en el Navegador y arrastra sobre ella un WebButton desde la Librería. Suéltalo centrado en la parte superior de la página en el Editor de Diseño. Luego, con el botón aún seleccionado en el Editor de Diseño, cambia la siguiente propiedad en el Panel Inspector asociado:

  • Caption: Create PDF

A continuación, añade el Manejador de Evento Pressed al botón y escribe el siguiente fragmento de código en el Editor de Código asociado:

// Nada realmente interesante aquí,
// Sólo creamos una nueva instancia de PDFDocument
// y asignamos su contexto gráfico a una variable
Var d As New PDFDocument
Var g As Graphics = d.Graphics

// El contenido del PDF será realmente escaso
// sólo una línea de texto, pero será suficiente
// para centrarnos en lo que realmente nos interesa ver
g.DrawText "Really simple PDF content", 20, 20

// Aquí es donde empieza lo realmente interesante.
// Creamos una instancia de WebFile y la asignamos
// a la propiedad wf añadida a la página WebPage1
wf = New WebFile

// Esta es la clave: el método PDFDocument.ToData
// devuelve como MemoryBlock (que puede convertirse directamente a String)
// los contenidos internos del documento PDF en este punto
// de modo que sólo hemos de asignarlo a la propiedad "data"
// de nuestra instancia WebFile
wf.Data = d.ToData

// Es importante definir el tipo MIME correcto para el archivo
// En este caso es un archivo PDF, de modo que…
wf.MIMEType = "application/pdf"

// También definimos el nombre del archivo…
wf.Filename = "SamplePDF.pdf"

// …y definimos su propiedad ForceDownload como True…
wf.ForceDownload = True

// …para que se descargue cuando llamemos al método
// Download sobre la instancia de nuestro WebFile
Call wf.Download

// Dado que también queremos mostrar el archivo PDF en un
// HTMLViewer, definimos la propiedad ForceDownload de nuevo
// con el valor False
wf.ForceDownload = False

// Y, por último, cargamos el documento DF en el HTMLViewer
// añadido a la página WebPage1
HTMLViewer1.LoadURL wf.URL

Como puedes ver, el anterior fragmento de código se encarga de crear una documento PDF de ejemplo, descargarlo, y también mostrarlo en una instancia de HTMLViewer; de modo que tendremos que añadir dicho control a la página WebPage1.

Selecciona de nuevo el elemento WebPage1 en el Navegador para que esté visible en el Editor de Diseño. Luego, arrastra un control HTMLViewer desde la Librería y suéltalo bajo el WebButton añadido en el paso anterior.

Con el control HTMLViewer1 seleccionado en el Editor de Diseño, haz clic sobre los iconos de los cuatro candados de modo que estén cerrados, y que encontrarás bajo la sección Locking del Panel Inspector asociado.

Como último paso, añade la propiedad WebFile a la página WebPage1 utilizando los siguientes valores en el Panel Inspector asociado:

  • Name: wf
  • Data Type: WebFile
  • Scope: Private

Probablemente querrás mover esta propiedad al objeto Session en tus propios proyectos web, de modo que cada usuario conectado a tu app pueda gestionar sus propios documentos PDF.

¡Y eso es todo! Ejecuta el proyecto, haz clic sobre el botón y observa cómo funciona.

¡Diviértete!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *