2010-07-06 21 views
8

Estoy usando PDFsharp en una aplicación ASP.NET MVC. Quiero agregar una imagen pero no importa en qué directorio la coloque, parece que no puede encontrarla. Tengo un código como el que yo estoy tratando de copiar la aplicación de ejemploPDFsharp no se puede encontrar la imagen (imagen no encontrada)

Section section = document.AddSection(); 
Image image13 = section.AddImage("../../images/logo.png"); 

No importa en qué directorio pongo esta imagen en, cuando el PDF se genera, veo Imagen no encontró un error en el archivo PDF diciendo " "

¿Alguien más ha visto este problema?

Respuesta

9

¿Podría estar buscando una ruta completa?

Trate

Image image13 = section.AddImage(Server.MapPath("~/images/logo.png")); 
+1

Tuve el mismo problema. El problema es que al depurar un asp.net mvc, librairies se cargan en directorios remotos, como C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Archivos ASP.NET temporales \ root \ 34f2a404 \ 3b92b98b \ assembly \ dl3 \ f8107a2b \ 16f99150_1bfcce01 -> la idea de Server.MapPath es excelente: funcionará tanto en entornos de depuración como de liberación. –

4

estoy usando PDFsharp en una aplicación asp.net mvc.

BTW: Usted no utiliza PDFsharp, pero está utilizando MigraDoc.

MigraDoc busca las imágenes relativas al directorio actual. Las páginas ASPX se compilan y se ejecutan desde un directorio temporal, no desde el directorio del proyecto. Por lo tanto, las rutas relativas no funcionarán como se espera.

Assembly.CodeBase puede ayudar a localizar las imágenes; Assembly.Location indica el directorio temporal.

Assembly.CodeBase se puede utilizar en código que se comparte entre ASP.NET y .NET. Server.MapPath también se puede usar (como lo sugiere Marko), pero solo funciona en ASP.NET.

+2

¿Por qué se votó a favor? – Marko

+0

Equipo - todavía no puedo hacer que esto funcione. . ¿sabes si alguien ha hecho esto con éxito? – leora

+0

Solo lo usamos sin MVC hasta el momento. Pero aquí hay una "confesión": http://forum.pdfsharp.net/viewtopic.php?p=3833#p3833 –

3

El objeto de documento MigraDoc tiene una propiedad ImagePath que le permite especificar los directorios que se buscarán las imágenes (separar varios directorios con semikola).

Si se pueden encontrar imágenes relativas a la ubicación del conjunto, entonces Assembly.CodeBase se puede usar para ubicar el conjunto (como se mencionó en mi respuesta anterior).

1

hilo viejo, pero puede ser útil para alguien

Esto funcionó para mí:

Document doc = new Document(); 
doc.ImagePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).Replace("file:\\", ""); 

entonces me puse mi imagen para copiar siempre y añadió que con su ruta relativa al directorio bin en mi Web proyecto.

+0

¡Esto TOTALMENTE funcionó para mí! ¡¡¡Eres un salvavidas!!! Gracias – user4566715

+0

¡Tengo que añadir que esto funciona muy bien para proyectos de webform! – user4566715

Cuestiones relacionadas