Você está na página 1de 7

ASP .

Net Abrir documento PDF


Si deseamos abrir un documento PDF desde nuestra aplicacin web podemos hacerlo ya sea bien abriendo directamente el proceso con la ruta del archivo o incrustndolo en un frame dentro de la pgina. Para el primer caso basta con insertar un botn a nuestra pgina y en el evento click utilizar algo como lo siguiente:

1 2 3

Protected Sub btnPDF_Click(sender As Object, e As EventArgs) Handles btnPDF.Click Process.Start("\\myServer\IT\MVC.pdf") End Sub

Est abrir el documento en nuestro programa para visualizar pdfs (Ej. Adobe Reader)

Pero que sucede si lo que buscamos es desplegarlo dentro de la misma pgina? Para este sentido vamos a crear una clase, donde estableceremos las propiedades del frame que mostrar el documento PDF

Agregamos una nueva clase al projecto

En la parte del code behind importamos los siguientes namespaces:

1 2 3 4 5 6 7 8

Imports Imports Imports Imports Imports Imports Imports Imports

System System.Collections.Generic System.ComponentModel System.Text System.Web System.Web.UI System.Web.UI.WebControls System.Design

Y procedemos a crear un nuevo namespace donde estableceremos la clase que formar el frame

1 2 3 4

Namespace ShowPDF <DefaultProperty("FilePath")> _ <ToolboxData("<{0}:ShowPdf runat=server></{0}:ShowPdf>")> _ Public Class ShowPdf Inherits WebControl

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

#Region "Declarations" Private mFilePath As String #End Region

#Region "Properties" 'Add System.Design Reference <Category("Source File")> _ <Browsable(True)> _ <Description("Set path to source file.")> _ <Editor(GetType(System.Web.UI.Design.UrlEditor), GetType(System.Drawing.Design.UI Public Property FilePath() As String Get Return mFilePath End Get

Set(value As String) If value = String.Empty Then mFilePath = String.Empty Else Dim tilde As Integer = -1 tilde = value.IndexOf("~"c) If tilde <> -1 Then mFilePath = value.Substring((tilde + 2)).Trim() Else mFilePath = value End If End If End Set End Property #End Region

#Region "Rendering" Protected Overrides Sub RenderContents(writer As HtmlTextWriter) Try Dim sb As New StringBuilder() sb.Append("<iframe src=" & FilePath.ToString() & " ") sb.Append("width=" & Width.ToString() & " height=" & Height.ToString() & " ") sb.Append("<View PDF: <a href=" & FilePath.ToString() & "</a></p> ") sb.Append("</iframe>") writer.RenderBeginTag(HtmlTextWriterTag.Div) writer.Write(sb.ToString()) writer.RenderEndTag() Catch ' with no properties set, this will render "Display PDF Control" in a ' a box on the page writer.RenderBeginTag(HtmlTextWriterTag.Div) writer.Write("Display PDF Control") writer.RenderEndTag() End Try End Sub #End Region

55 56 57 58 59 60 61 62 63 64 65 66 67 68

End Class End Namespace

Guardamos y compilamos nuestra aplicacin. Ahora dentro de nuestra pgina aspx, registramos el namespace que acabamos de crear e insertamos un iframe con el id que gustemos

En diseo se vera algo similar a esto:

Ahora nos vamos al code behind de la pgina y establecemos el src en blanco durante el page load

1 2

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles M myFrame.Attributes.Add("src", "") End Sub

3
y al momento de presionar el botn correspondiente asignamos la ruta de nuestro pdf

1 2 3

Protected Sub btnPDF0_Click(sender As Object, e As EventArgs) Handles btnPDF0.Click myFrame.Attributes.Add("src", "\\myServer\IT\_Development\MVC.pdf") End Sub

Y este sera el resultado:

ASP.NET Visualizar documentos en linea (Excel, word, pdf, ppt, ) Google Docs tiene un visor en lnea que permite que mltiples formatos de archivos sean visualizados en lnea, entre otros formatos tenemos:

Microsoft Excel (.XLS and .XLSX) Microsoft PowerPoint 2007 / 2010 (.PPTX) Adobe Illustrator (.AI) Adobe Photoshop (.PSD) Autodesk AutoCad (.DXF) Scalable Vector Graphics (.SVG) TrueType (.TTF) Lo que vamos a hacer nosostros ser mostrarles cmo podemos incorporar esa gran funcionalidad en nuestras aplicaciones ASP.NET. Supongamos que tenemos una carpeta llamada Uploads en nuestro servidor, el cual est en la raiz de nuestra aplicacin esta carpeta contiene mltiples archivos que queremos que sean visualizados en lnea, sin necesidad que el usuario los descargue. Para visualizar un documento con el visor de Google Docs, debemos construir una url con esta estructura:
http://docs.google.com/viewer?url= + la_url_de_tu_archivo + &embedded=true

Luego, aadimos un iframe a nuestra pgina, dicho iframe tendr como src la url que construimos arriba. Entonces, sabiendo esto nosotros, vamos a hacer recuperar los nombres de los

archivos que estn guardados en la carpeta Uploads y vamos a mostrar los documentos a travs de un iframe:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Integrar Visor de documentos Google con ASP.NET</title> </head> <body> <form id="form1" runat="server"> <asp:Literal ID="ltHTML" runat="server"></asp:Literal> </form> </body> </html> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack Then Return 'la carpeta en el servidor con los archivos a visualizar Dim di As New IO.DirectoryInfo(Server.MapPath("~\Uploads")) 'recuperamos los archivos Dim Files As IO.FileInfo() = di.GetFiles("*.*") 'elaboro el html Dim htm As New StringBuilder htm.Append("<table style='width: 100%'>") For Each f As IO.FileInfo In Files htm.Append("<tr>") htm.Append("<td style='padding: 20px auto'>") htm.AppendFormat("<iframe src='http://docs.google.com/gview?url=http://www.midominio.com/Uploads /{0}&embedded=true'", f.Name) htm.Append(" style='width:50%; height:300px;' frameborder='0'></iframe>") htm.Append("</td>") htm.Append("</tr>") Next htm.Append("</table>") ltHTML.Text = htm.ToString() End Sub

Al ejecutar la pgina aspx vern que se visualiza igual que la imagen que muestro arriba. Eso es todo. Espero que les sea de utilidad ;)

Você também pode gostar