PDA

Ver la versión completa : Mostrar word con asp.net




abel_23
08-11-2010, 01:39 PM
buenas Tardes señores de DragonJar

les envio un saludo cordial desde Perú, felicitandolos por todos los aportes que hacen a los miles de usuarios y desarrolladores al rededor del mundo, bueno tengo una inquietud y un problema que quisiera que me apoyen, bueno les explico estoy desarrollando un modulo en el cual administra documentos como reglamentos, normas, politicas etc, como veran son documentos importantes y me han solicitado que esto se haga a nivel de bases de datos, osea que el archivo se registre en una tabla, bueno el caso es que si lo puedo almacenar en un campo de la tabla documentos en un campo de tipo Image, y tambien puedo bajar el documento almacenado pero los usuarios quieren que tambien el documento se muestre en un pagina aps.net con una marca de agua de la Institucion, por lo que pense al momento de obtener el contenido del documento insertarlo en un textbox y asi mostrarlo, bueno espero que se pueda entender claramente el caso hasta ya hice los siguiente:

1. crear mi tabla de documentos :

CREATE TABLE DOCUMENTO
(
COD_DOCUMENTO INT NOT NULL,
FEC_REGISTRO DATETIME,
CONTENIDO IMAGE,
VC_TITULO VARCHAR(20)
)


2. cree el formulario para subir el documento con un procedimiento almacenado :

3. y con este formulario obtengo el archivo que se encuentra en la tabla de documento en el base de datos.
(script)

' Open a database connection.
Dim strConnection As String = "Data Source=.;Initial Catalog=BD_prueba;Integrated Security=True"
Dim cn As SqlConnection = New SqlConnection(strConnection)
cn.Open()
Dim Da As New SqlDataAdapter("Select contenido from documento where cod_documento = 15652", cn)
Dim bycb As SqlCommandBuilder = New SqlCommandBuilder(Da)
Dim ds As New DataSet()
Da.Fill(ds, "contenido ")
Dim myrow As DataRow
myrow = ds.Tables("contenido ").Rows(0)
Dim mydata() As Byte
mydata = myrow("contenido ")
Response.Buffer = True
Response.AddHeader("Content-Type", "attachment")
Response.AddHeader("Content-Disposition", "filename=" & Now().ToString & "." & "doc")
Response.ContentType = "application/msword"
Response.BinaryWrite(mydata)
4. en el cuarto paso me falta que el documento que esta en la base de datos se muestre en algun control que este en un formulario, pero la finalidad es que el documento se muestre en el explorador web, que no se descarge, he intentado con lo siguiente:


Public Sub LeerDeBD()
'Abrimos la conexion, exactamente igual que antes
param_conexion = objcon.conexion
cnn.ConnectionString = param_conexion
cnn.Open()
'Este es el comando que abre el registro que deseamos. Para este
'ejemplo abrimos siempre el primer registro, habría que modificar
' este código para que el método recibiera como parámetro el
'registro que queremos abrir, claro.
Dim comm As New SqlCommand("SELECT top 1 * FROM documento " , cnn)
comm.CommandType = CommandType.Text
Dim da As New SqlDataAdapter(comm)
Dim ds As New DataSet("Binarios")
da.Fill(ds)
'Creamos un array de bytes que contiene los bytes almacenados
'en el campo Documento de la tabla

Dim bits As Byte() = CType(ds.Tables(0).Rows(0).ItemArray(1), Byte())
cnn.Close()
'Vamos a guardar ese array de bytes como un fichero en el
'disco duro, un fichero temporal que después se podrá descartar.
'Para evitar problemas de concurrencia de usuarios,
'generamos un nombre único para el mismo
Dim sFile As String = "tmp" + objcon.GenerarNombreFichero() & ".doc"
'Creamos un nuevo FileStream, que esta vez servirá para
'crear un fichero con el nombre especificado
Dim fs As New FileStream(Server.MapPath(".") + "\DocsGenerados\" & sFile, FileMode.Create)
'Y escribimos en disco el array de bytes que conforman
'el fichero Word
fs.Write(bits, 0, Convert.ToInt32(bits.Length))
fs.Close()


'Para mostrar el fichero, utilizamos una función
'JavaScript llamada mostrarFichero (que lo único que
'hace es cargar el fichero especificado)
'y hacemos que se ejecute en un pop-up.

Dim script As String = "<script languaje='javascript'> "
script += "mostrarFichero('DocsGenerados/" & sFile & "') "
script += "</script>" + Environment.NewLine
Page.RegisterStartupScript("mostrarFichero", script)

End Sub

con esto lo mando a una ventana popup pero estas se cierra y automaticamente se descarga el archivo word, por lo que necesito de su ayuda para mostrarlo en el explorador.
Bueno espero que me puedan ayudar si tienen alguna duda sobre la explicacion haganmela saber porfa.