Visual Basic - Abrir pdf incrustado como recurso desde botón

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Luis (12 intervenciones) el 20/08/2014 20:10:39
Hola,

Necesito hacer que, al pulsar un botón de mi programa, se abra un pdf. Dicho pdf debe estar contenido dentro del propio programa (como recurso asumo). he probado lo siguiente pero me da error y no sé por qué. Si a alguien se le ocurre, que me avise por favor :)

1.- primero he ido a las propiedades del programa a la pestaña de recursos. Agregar archivo existente y he agragado el archivo pdf (A.pdf)

2.- En el botón he escrito (es evento de doble click sobre un label):

Private Sub Label7_DoubleClick(sender As Object, e As EventArgs) Handles Label7.DoubleClick

Dim assembly As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly()
Dim root As String = assembly.GetName().Name
Dim stream As System.IO.Stream = assembly.GetManifestResourceStream(root + "." + "A.pdf")
Dim buffer(Convert.ToInt32(stream.Length) - 1) As Byte
stream.Read(buffer, 0, buffer.Length)
stream.Close()
Dim f As New IO.FileStream("A.pdf", IO.FileMode.Create, IO.FileAccess.Write)
f.Write(buffer, 0, buffer.Length)
f.Close()

Process.Start("A.pdf")


End Sub

En la linea de "Dim buffer.." me salta la excepeción de NullReference

¿Alguna idea?

Muchas gracias de antemano

Saludos

Luis
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Pico (114 intervenciones) el 20/08/2014 22:57:58
Te da error porque no encuentra el recurso, y stream es null (nothing).

Eso de root no sé de dónde lo has sacado, pero me da que venía dentro de unos <>. Es decir, no tienes que poner root, sino la raíz del proyecto, que es el nombre del proyecto, más Resources, más el nombre del recurso.

Si el proyecto se llama PrimerProgramaDeLuis, el recurso se llama A.pdf, la ruta donde está es "PrimerProgramaDeLuis.Resources.A.pdf", no root.
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Luis (12 intervenciones) el 20/08/2014 23:43:24
Hola pico,

He probado como me dices y me sigue dando el mismo error

Private Sub Label7_DoubleClick(sender As Object, e As EventArgs) Handles Label7.DoubleClick

Dim assembly As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly()
Dim root As String = assembly.GetName().Name
Dim stream As System.IO.Stream = assembly.GetManifestResourceStream("Prueba.Resources.A.pdf" + "." + "A.pdf")
Dim buffer(Convert.ToInt32(stream.Length) - 1) As Byte
stream.Read(buffer, 0, buffer.Length)
stream.Close()
Dim f As New IO.FileStream("A.pdf", IO.FileMode.Create, IO.FileAccess.Write)
f.Write(buffer, 0, buffer.Length)
f.Close()

Process.Start("A.pdf")


End Sub

Alguna idea?
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Pico (114 intervenciones) el 21/08/2014 07:45:28
Eso no es como te he dicho. Te he dicho que si el proyecto se llama PrimerProgramaDeLuis sería "PrimerProgramaDeLuis.Resources.A.pdf" y le has puesto "PrimerProgramaDeLuis.Resources.A.pdf + "." + "A.pdf". Yo no lo veo igual.
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Luis (12 intervenciones) el 21/08/2014 12:51:38
Si te quedas más tranquilo, también lo había probado así y nada... Sigue sin leerlo
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Pico (114 intervenciones) el 21/08/2014 13:09:48
Volvemos a ver.

Si yo no tengo que quedarme tranquilo ni nervioso. Yo he metido y sacado recursos de un exe en c, c#, delphi, ensamblador, y yó qué sé en qué más. No tengo ningún problema con eso. Si quieres sacar un recurso de un exe lo primero es ponerle bien el nombre, y el nombre es como te he dicho, no otro. Si sigue sin funcionar, lo siguiente es ver que de verdad eso que quieres sacar está como recurso, y cómo se llama, no vaya a ser que esté con otro nombre. Eso te lo da el GetManifestResourceNames(); del objeto que tienes assembly. Te a un array de string con el nombre (correcto) de todos los recursos del exe.
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Luis (12 intervenciones) el 21/08/2014 14:18:28
He hecho un bucle para que me saque los recursos según la forma que me dijiste, y efectivamente el nombre estaba mal (es WindowsApplication1) pero me sigue dando error.

Es decir, en el bucle, los nombres que me salían eran sólo los nombres de los forms. Por ejemplo: WindowsApplication1.Resources.Form1.resources

y así con todos pero los recursos en sí en la carpeta de Resources (a parte del pdf tengo varias imágenes)

Saludos

Luis
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Pico (114 intervenciones) el 21/08/2014 14:52:59
Si no te salen con el GetManifestResourceNames() es que no están como recursos en el exe. El hecho de estar en la carpeta Resources del explorador de soluciones no implica que estén en el exe. Tienes que ir a las propiedades de lo que quieras que esté incluído y en Acción de Compìlación ponerlo como recurso incrustado.

El nombre del proyecto te lo da Dim root As String = assembly.GetName().Name.
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
sin imagen de perfil

Abrir pdf incrustado como recurso desde botón

Publicado por Luis (12 intervenciones) el 21/08/2014 17:33:12
Solucionado!

Una vez cambié la propiedad del pdf, volví a buscar con el GetManifestResourceNames() y copié el mismo nombre y ya funcionó.

Gracias!
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

Abrir pdf incrustado como recurso desde botón

Publicado por Hector (1 intervención) el 28/06/2018 04:35:00
podrías subir tu código que ya funciona por favor?

De antemano muchas gracias. Saludos
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